python进程需要100%的CPU

m1k*_*3y3 5 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()
Run Code Online (Sandbox Code Playgroud)

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

请指教

phi*_*hag 14

如果你知道下次运行的时间,你可以简单地使用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()
Run Code Online (Sandbox Code Playgroud)

如果您希望其他线程能够打断您,请使用如下事件:

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()
Run Code Online (Sandbox Code Playgroud)

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

在许多情况下,您还需要使用Lock来避免共享数据上的竞争条件.确保在按住锁定时清除事件.

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