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

时间:2015-08-05 18:51:56

标签: python windows sleep freeze anaconda

我的问题几乎与此处发布的问题相同:

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的另一个倍数上。另一个有趣的观察是,在我按下按键并恢复执行后,打印出的时间增量反映了坐在那里等待的时间。这也与我看到此错误的原始脚本一致,但是,在该实例中它只打印了看似正常时间范围的内容,所以我知道错误发生在分配时间值之后。在这两种情况下,看起来错误发生在其中一个打印语句中。

1 个答案:

答案 0 :(得分:0)

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

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