在python中,如果我想保持一个进程或线程永远,我通常可以使用空的while循环执行此操作:
while 1:
pass
但是,这会占用不公平的CPU进程。添加短暂的睡眠会起作用
import time
while 1:
time.sleep(0.01)
有没有最好,更清洁的方法呢?感谢
答案 0 :(得分:8)
考虑到相当奇怪的要求(这个过程永远不会占用太多CPU),这是相当紧凑的:
import threading
dummy_event = threading.Event()
dummy_event.wait()
...但是,我担心我会屈服于解决你的Y而不是你的X的诱惑。
除此之外,如果您的平台未提供threading
模块,则无法使用此功能。如果您尝试替换dummy_threading
模块,dummy_event.wait()
会立即返回。
更新:如果您只是为了子进程而保留父进程,则可以使用wait()
上的Popen objects方法或{{3 join()
个对象上的方法。这两种方法都将无限期地阻塞,直到子进程结束。如果您正在使用其他一些子进程API,那么必然会有相同的功能。如果没有,请获取流程的PID并使用Process
。
答案 1 :(得分:2)
请勿使用忙碌的等待。根据您正在等待的内容,使用操作系统的阻塞等待功能之一,例如, Unix上为select
,Windows上为WaitForSingleObject
/ WaitForMultipleObjects
。
答案 2 :(得分:2)
在很短的时间内睡觉有什么问题? 1毫秒接近现代计算机的永恒。如果你没有成千上万的这些线程(听起来你没有这样做),那么在循环中每次迭代睡眠一,十,一万或一千万毫秒都没有错。 CPU甚至都不会注意到这一点。
答案 3 :(得分:1)