我将在while循环中让Python以24/7运行,这是这类程序的示例:
while True:
print ("me again...")
但是当我运行它时,我的CPU达到了100%!但我不希望因为我的计划将在长的长度运行等,我不希望我的CPU变得非常热,反正是有,我可以防止这种情况?
我将在while循环中让Python以24/7运行,这是这类程序的示例:
while True:
print ("me again...")
但是当我运行它时,我的CPU达到了100%!但我不希望因为我的计划将在长的长度运行等,我不希望我的CPU变得非常热,反正是有,我可以防止这种情况?
Answers:
在循环末尾有一个
time.sleep(xx)
持续几秒钟,或time.sleep(x.x)
代表部分秒钟
(请千万记得要导入库的时候,像这样:import time
)
使用xx尽可能高的值,而不会对您的程序产生不利影响。现在,您的程序始终在尽可能快地完成所有事情,而不是给Pi腾出一些时间来休息或做其他事情。
import time
呢
确保确实需要重复运行任务。这称为忙等待,几乎总是次优。例如,如果您的任务是检查子流程的输出,则可以subprocess.wait()
使其完成。如果您的任务是等待文件系统中的文件或目录被触摸,则可以使用pyinotify从内核处理的文件系统事件中触发代码。
这是您编写无限循环来繁忙等待而又不消耗过多CPU的方式。
Python 2:
from __future__ import print_function
from __future__ import division
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
Python 3:
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
由于@gnibbler在另一个答案中进行了测试,因此在最近的机器上,所提供的代码不应消耗超过1%的CPU。如果您的有效载荷代码仍然占用过多的CPU,请考虑进一步延长睡眠时间。另一方面,可能需要对有效负载代码进行优化以重复执行。例如,缓存可以加快在未更改的数据上运行的速度。
此答案尝试以@ user2301728的答案为基础。
我遇到了同样的问题,请在Stack Exchange上查看我的问题。将溶液的组合time.sleep(0.01)
和nice
。nice
降低应用程序可用的CPU。这是我启动应用程序的方式:nice -n 19
。
您也可以尝试nice -n 19 python myscript.py
。
nice是一个* nix实用程序,用于设置任务的CPU优先级。19是最大的权重,因此是最慢的设置。