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.