while True:
print ("me again...")
但是当我运行它时,我的CPU达到100%!但是我不希望这样,因为我的程序会运行很长一段时间,等等。我不希望我的CPU变得很热,反正我可以防止这种情况发生吗?
#1 楼
在循环末尾有一个time.sleep(xx)
秒,或一个time.sleep(x.x)
代表部分秒(请记住要导入库时间,例如:
import time
)xx尽可能高,而又不会对程序造成不利影响。现在,您的程序始终在尽可能快地完成所有事情,而不是给Pi腾出一些时间来休息或做其他事情。
评论
嗯...非常有趣...我会尝试的。谢谢!不敢相信我没有想到这一点!
–user151324
13年6月22日,0:32
是否有我应该导入的库等?我收到一条错误消息,说未定义时间
–user151324
13年6月22日,0:34
@coding_corgi是的,您需要时间库。
–黄油
2013年6月22日0:38
那么导入时间呢?
–user151324
13年6月22日,0:40
@coding_corgi。对,那是正确的。
–黄油
13年6月22日,0:43
#2 楼
前言请确保您确实需要重复运行任务。这称为忙等待,几乎总是次优。例如,如果您的任务是检查子流程的输出,则可以
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
pre >
评估
@gnibbler在另一个答案中进行了测试,在最近的机器上,所提供的代码不应消耗超过1%的CPU。如果您的有效载荷代码仍然占用过多的CPU,请考虑进一步延长睡眠时间。另一方面,可能需要对有效负载代码进行优化以重复执行。例如,缓存可以加快在未更改的数据上运行的速度。
信贷
此答案尝试以@ user2301728的答案为基础。
#3 楼
我遇到了同样的问题,请在Stack Exchange上查看我的问题。该解决方案是time.sleep(0.01)
和nice
的组合。 nice
降低了应用程序可用的CPU。这是我启动应用程序的方式:nice -n 19
。#4 楼
您也可以尝试nice -n 19 python myscript.py
。nice是* nix实用程序,用于设置任务的CPU优先级。 19是最大的重量,因此是最慢的设置。
评论
不可以。提高进程的美观度仅有助于使其他进程更频繁地获取CPU。在没有其他进程的任何时刻,OP的代码仍将使用100%的CPU,如果有,它们将使用CPU,总计为100%。
–
2013年6月26日14:03
评论
不用等待,CPU就会100%地运行,因为这就是您告诉它要做的:)尽可能快地打印。因此,等待将有助于减轻这一负担。打印,通常是非常昂贵的操作。写入文件要便宜得多。您需要告诉操作系统,在给定的时间内您不希望有任何CPU周期,否则您将无法做任何事情来避免看到您看到的内容。