在python中无阻塞等待

pis*_*hio 11 python multithreading

在python中,如果我想让进程或线程永远运行,我通常可以使用空的while循环执行此操作:

while 1:
    pass
Run Code Online (Sandbox Code Playgroud)

但是,这会占用不公平的CPU进程.增加一个短暂的睡眠是有效的

import time
while 1:
    time.sleep(0.01)
Run Code Online (Sandbox Code Playgroud)

有没有最好和更清洁的方式这样做?谢谢

det*_*tly 8

鉴于相当奇怪的要求(一个过程永远不使用太多CPU),这是相当紧凑的:

import threading
dummy_event = threading.Event()
dummy_event.wait() 
Run Code Online (Sandbox Code Playgroud)

......但是,我担心我会屈服于解决你的Y而不是你的X的诱惑.

除此之外,如果您的平台不提供threading模块,这将不起作用.如果您尝试替换dummy_threading模块,请dummy_event.wait()立即返回.

更新:如果您只是为了子进程而保持父进程,则可以wait()Popen对象上使用该方法,或join()Process对象上使用该方法.这两种方法都将无限期地阻塞,直到子进程结束.如果您正在使用其他一些子进程API,那么必然会有相同的功能.如果没有,获取进程的PID并使用os.waitpid().