加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python CPU使用率降至0%,在脚本执行期间按键后恢复

发布时间:2020-12-20 13:06:39 所属栏目:Python 来源:网络整理
导读:我的问题几乎与此处发布的问题相同: Python sleeps until keystroke 这个帖子多年来一直处于非活动状态,如果有一个不同的协议“重新开放”这个问题请告诉我 – 我同时发布这个问题,如果我应该这样做,我会提前道歉. 我无法发布代码,但这里有一些我可以分享的
我的问题几乎与此处发布的问题相同:

Python sleeps until keystroke

这个帖子多年来一直处于非活动状态,如果有一个不同的协议“重新开放”这个问题请告诉我 – 我同时发布这个问题,如果我应该这样做,我会提前道歉.

我无法发布代码,但这里有一些我可以分享的细节 – 我正在执行一个包含许多迭代生成的print语句的脚本,以跟踪脚本执行的几个小时内的进度.在任务管理器中监视我的CPU使用情况时,我可以看到,当我在运行脚本的实际命令提示符中输入任何类型的键击时,周期性地使用率降至0%并且仅恢复.

这发生在我的笔记本电脑和我试过运行脚本的服务器上.操作系统是Windows 8.1和Windows Server 2012r2,我使用的是Anaconda 2.2和Python 3.4.3.我使用的唯一非标准python库是pandas 0.15.2,numpy 1.9.2,statsmodels 0.6.1和scikit-learn 0.16.1.

我不确定我是否可以确定这是否总是发生在特定的一行,但我会尝试 – 如果我能做到这一点,我可以将它追踪到我正在使用的特定包裹中吗?如果有人有什么想法可能导致这样的事情,请分享,否则任何关于如何解决这个问题的建议将非常感谢.

更新:我运行以下代码以尝试重现错误:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from sklearn.linear_model import LogisticRegression
from datetime import datetime

num_rows = 1000
i = 1

t_init = datetime.now()
while True:
    with open('temp_stage_1.txt','w') as file:
        file.write('current stage 1 iteration number: %d' % i)

    X = np.random.randint(2,size=(num_rows,25))
    y = np.random.randint(2,size=num_rows)

    with open('temp_stage_2.txt','w') as file:
        file.write('current stage 2 iteration number: %d' % i)

    clf = LogisticRegression()
    clf.fit(X,y)
    clf.score(X,y)

    with open('temp_stage_3.txt','w') as file:
        file.write('current stage 3 iteration number: %d' % i)

    logit = sm.Logit(y,X)
    results = logit.fit(disp=False)

    with open('temp_stage_4.txt','w') as file:
        file.write('current stage 4 iteration number: %d' % i)

    for j in range(10000):
        waste_time_str = 'wasting some time'

    if i % 1000 == 0:
        t_now = datetime.now()
        t_delta = (t_now-t_init).seconds
        t_init = t_now
        print(t_delta)
        print(i) 

    i += 1

我能够重现错误并打开创建的临时文件,我可以看到在第26000次迭代更新第4个临时文件后发生了错误.我第二次运行它时,根据第4个临时文件,错误发生在1000的另一个倍数上.另一个有趣的观察是,在我按下按键并恢复执行后,打印出的时间增量反映了坐在那里等待的时间.这也与我看到此错误的原始脚本一致,但是,在该实例中它只打印了看似正常时间范围的内容,所以我知道错误发生在分配时间值之后.在这两种情况下,看起来错误发生在其中一个打印语句中.

解决方法

您很可能偶然进入“快速编辑模式”(通过在Windows终端中选择一些文本).快速编辑模式会阻止对控制台的任何打印,直到您离开它(通过按键),这与您在其中一个打印语句中看到错误一致.

有关更多详细信息,请参阅this post(不是特定于python).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读