在python,如果我想保持一个进程或线程运行永远,我通常可以用空做这个while循环:非阻塞等待
while 1:
pass
这一点,但是,会吃的不公平的CPU进程量。添加一个短暂的睡眠将工作
import time
while 1:
time.sleep(0.01)
是否有任何最好和更干净的方式做到这一点?谢谢
在python,如果我想保持一个进程或线程运行永远,我通常可以用空做这个while循环:非阻塞等待
while 1:
pass
这一点,但是,会吃的不公平的CPU进程量。添加一个短暂的睡眠将工作
import time
while 1:
time.sleep(0.01)
是否有任何最好和更干净的方式做到这一点?谢谢
鉴于相当奇特的要求(即永远不用使用多CPU的过程),这是紧凑合理:
import threading
dummy_event = threading.Event()
dummy_event.wait()
...但是,我担心我屈服于诱惑解决您的ÿ而不是你的X.
除此之外,如果你的平台不提供threading
模块,这将不起作用。如果您尝试替换dummy_threading
模块,则会立即返回dummy_event.wait()
。
更新:如果你只是保持父进程会为它的子进程的缘故,你可以使用Popen objects的wait()
方法,或Process
对象join()
方法。这两种方法都会无限期地阻塞,直到子进程结束。如果您使用其他一些子流程API,则必然会有可用的等效功能。如果没有,请获取进程的PID并使用os.waitpid()
。
不要使用繁忙的等待。根据您所等待的内容,使用操作系统的阻塞等待函数之一,例如在Unix上是select
,在Windows上是WaitForSingleObject
/WaitForMultipleObjects
。
感谢您的回答。不过,我并没有等待一件事。正如问题所暗示的那样,这个过程的目标是在被杀之前运行_forever_。 – pistacchio 2010-07-12 09:12:26
在很短的时间内睡眠有什么问题? 1毫秒接近现代计算机的永恒。假如你没有成千上万个这样的线程(听起来你没有这些线程),那么在循环中每次迭代睡眠一次,一万次,一万次或千万次时都没有问题。 CPU甚至不会注意到这个小点。
线程在等待什么?你为什么不做时间睡(1000000)? – Sjoerd 2010-07-12 07:44:15
这是一个类似于服务器的应用程序,所以我希望它等待超过几天(1000000秒)! 理论上,必须运行_forever_的线程必须持续运行的时间要比__非常长的秒数多__ – pistacchio 2010-07-12 07:59:00
除了睡眠或繁忙循环之外,线程是否执行了*任何有用的操作?如果不是,你可以放弃吗?如果它*做了一件有价值的事情,'大概!这就是我们需要知道的帮助你的一点。 – 2010-07-12 09:17:14