python进程需要100%的CPU

时间:2012-02-19 13:30:38

标签: python cpu consumption

我正在尝试运行python应用程序并根据指定的时间间隔执行操作。下面的代码不断消耗100%的CPU。

def action_print():

    print "hello there"

interval = 5
next_run = 0

while True:

    while next_run > time.time():
        pass

    next_run = time.time() + interval

    action_print()

我想避免让进程进入休眠状态,因为会有更多动作以不同的时间间隔执行。

请告知

2 个答案:

答案 0 :(得分:13)

如果你知道下一次运行的时间,你可以简单地使用time.sleep

import time
interval = 5
next_run = 0
while True:
   time.sleep(max(0, next_run - time.time()))

   next_run = time.time() + interval
   action_print()

如果您希望其他线程能够打断您,请使用event,如下所示:

import time,threading
interval = 5
next_run = 0
interruptEvent = threading.Event()
while True:
   interruptEvent.wait(max(0, next_run - time.time()))
   interruptEvent.clear()

   next_run = time.time() + interval
   action_print()

另一个线程现在可以调用interruptEvent.set()来唤醒你的。

在许多情况下,您还希望使用Lock来避免共享数据race conditions。确保在按住锁定时清除事件。

您还应该知道,在cpython下,只有一个线程可以执行Python代码。因此,如果您的程序受多个线程的CPU限制并且您正在使用cpython或pypy,则应将threading替换为multiprocessing

答案 1 :(得分:2)

大概你不想写time.sleep(interval),但用time.sleep(0.1)代替'pass'几乎可以完全释放你的CPU,并且仍然允许你在WHILE谓词中灵活使用。

或者你可以为你正在安排的每个事件使用一个线程并使用time.sleep(interval)但这仍然会占用你的CPU。

底线:你的循环WHILE:PASS绕着你的所有CPU消耗得非常快。