如何降低此Python程序的CPU使用率?


15

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

while True:

    print ("me again...")

但是当我运行它时,我的CPU达到了100%!但我不希望因为我的计划将在长的长度运行等,我不希望我的CPU变得非常热,反正是有,我可以防止这种情况?


3
不用等待,CPU就会100%运转,因为这就是您告诉它要做的:)尽可能快地打印。因此,等待将有助于减轻这一负担。打印,通常是非常昂贵的操作。写入文件要便宜得多。
Piotr Kula 2013年

您需要告诉操作系统在给定的时间段内不希望有任何CPU周期,否则您将无法做任何事情来避免看到您看到的内容。
托尔比约恩Ravn的安德森

Answers:


16

在循环末尾有一个

time.sleep(xx)持续几秒钟,或time.sleep(x.x)代表部分秒钟

(请千万记得要导入库的时候,像这样:import time

使用xx尽可能高的值,而不会对您的程序产生不利影响。现在,您的程序始终在尽可能快地完成所有事情,而不是给Pi腾出一些时间来休息或做其他事情。


嗯...非常有趣...我会尝试的。谢谢!不能相信,我没有想到这一点!
user151324 2013年

是否有我应该导入的库等?我收到一条错误消息,提示未定义时间
user151324 2013年

@coding_corgi是的,您需要时间库。
巴特斯

2
import time
user151324 2013年

@coding_corgi。对,那是正确的。
黄油

14

前言

确保确实需要重复运行任务。这称为忙等待,几乎总是次优。例如,如果您的任务是检查子流程的输出,则可以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的答案为基础。



1

您也可以尝试nice -n 19 python myscript.py

nice是一个* nix实用程序,用于设置任务的CPU优先级。19是最大的权重,因此是最慢的设置。


2
不可以。提高进程的美观度仅有助于使其他进程更频繁地获取CPU。在没有其他进程的任何时刻,OP的代码仍将使用100%CPU,如果有,它们将使用CPU,再次总计为100%。
Bengt 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.