我有个函数偶尔挂起。通常我会设置一个闹钟,但我在Windows中,它是不可用的。有没有简单的方法来解决这个问题,或者我应该创建一个调用time.sleep()的线程?
最后只剩下一根线了。唯一的诀窍是用os._exit
而不是sys.exit
import os
import time
import threading
class Alarm (threading.Thread):
def __init__ (self, timeout):
threading.Thread.__init__ (self)
self.timeout = timeout
self.setDaemon (True)
def run (self):
time.sleep (self.timeout)
os._exit (1)
alarm = Alarm (4)
alarm.start ()
time.sleep (2)
del alarm
print 'yup'
alarm = Alarm (4)
alarm.start ()
time.sleep (8)
del alarm
print 'nope' # we don't make it this far
你可以——正如你所提到的那样——启动一个新的线程,它能睡眠那么多秒。
或者您可以使用Windows的一个多媒体计时器(在Python中,它在windl.winmm中)。我相信你要找的是
timeSetEvent
。顺便说一下,我发现了一段使用它的代码here。最健壮的解决方案是使用子流程,然后终止该子流程。Python2.6将.kill()添加到subprocess.Popen()中。
我不认为你的线程方法能像你期望的那样工作。删除对线程对象的引用不会终止线程。相反,您需要设置一个属性,该属性在线程醒来时进行检查。
原来的海报是这样解决自己的问题的:
最后只剩下一根线了。唯一的诀窍是用
os._exit
而不是sys.exit
相关问题 更多 >
编程相关推荐