我将在while循环中让Python在24/7上运行,这是该程序的示例:

while True:

    print ("me again...")


但是当我运行它时,我的CPU达到100%!但是我不希望这样,因为我的程序会运行很长一段时间,等等。我不希望我的CPU变得很热,反正我可以防止这种情况发生吗?

评论

不用等待,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
  

评估

@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