假设我有以下python3程序:
from threading import Timer
import time
thread = Timer(600, print, args=['I am running'])
thread.start()
while threading.activeCount() > 1:
{{Function to calculate time until thread will start running}}
print ("Thread will start in %d seconds" % {get above value})
time.sleep(10)
我正在看的是有点复杂,有多个线程,但实质上,对于给定的Timer线程,有没有办法检查它以查看它何时被安排运行?
答案 0 :(得分:0)
我不确定我说得对你说的是什么,但你可能想要这样的东西:
from threading import Thread
import time
thread = Timer(600, print, args=['I am running'])
thread.start()
class ThreadTimeoutLauncher(Thread):
def __init__(self, timeout, cb, *args, **kwarg):
super(Thread, self).__init__()
self.timeout = timeout
self._cb = cb
self._args = args
self._kwarg = kwarg
def run():
print ("Thread will start in %d seconds" % self.timeout)
while self.timeout > 0:
time.sleep(1)
self.timeout -= 1
self.cb(*self._args, **self._kwarg)
这里的想法是重新创建一个Timer计数线程,该计时器线程将在时间结束前倒计时,并在执行此操作时更新“超时值”。当它结束时,它启动Thread事件。所以当你这样做时:
def foo():
print "Thread launched!"
t = ThreadTimeoutLauncher(600, foo)
t.start()
while True:
time.sleep(0.5)
print "thread will be launched in: %d sec." % t.timeout
也可以从Timer继承并更改Timer的run()方法,但它意味着 UTSL ; - )