我的问题与此处发布的问题几乎相同:
该线程多年来一直处于非事件状态,如果有不同的协议(protocol)用于“重新打开”问题,请告知 - 我同时发布了这个问题,如果我应该这样做,我会提前道歉不同。
我无法发布代码,但我可以分享一些细节 - 我正在执行一个脚本,其中包含许多迭代生成的打印语句,以跟踪脚本执行所需的几个小时的进度。在任务管理器中监视我的 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
我能够重现错误,通过打开创建的临时文件,我可以看到错误发生在第 4 个临时文件在第 26000 次迭代中更新之后。我第二次运行它,根据第 4 个临时文件,错误发生在另一个 1000 的倍数上。另一个有趣的观察是,在我击键并恢复执行后,打印出的时间增量反射(reflect)了它坐在那里等待的时间。这也与我看到此错误的原始脚本一致,但是,在那种情况下,它只打印了看似正常的时间范围,所以我知道错误发生在分配时间值之后。在这两种情况下,错误似乎都发生在其中一个打印语句中。
最佳答案
您很可能无意中进入了“快速编辑模式”(通过在 Windows 终端中选择一些文本)。快速编辑模式会阻止任何打印到控制台,直到您离开它(通过按下一个键),这与您在其中一个打印语句中看到的错误是一致的。
参见 this post (不是 python 特定的)了解更多详细信息。
关于Python CPU 使用率下降到 0%,在脚本执行期间击键后恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840563/