Dan*_*Dan 5 python windows multithreading timeout python-2.7
我正在使用threading.Thread多线程代码。我想Timeout exception知道至少有1个线程没有在X秒内完成工作。我在这里找到了一些答案,描述了如何解决该问题,但是大多数答案都与UNIX兼容,而我使用的是Windows平台。
代码例如:
from threading import Thread
from time import sleep
def never_stop():
while 1 > 0:
print 'a'
sleep(5)
print 'b'
return
t1 = Thread(target=never_stop)
t1.start()
t2 = Thread(target=never_stop)
t2.start()
t3 = Thread(target=never_stop)
t3.start()
t1.join(2)
t2.join(2)
t3.join(2)
Run Code Online (Sandbox Code Playgroud)
我试图在该join方法中设置超时,但没有用。
有任何想法吗?
小智 6
最好的方法是让线程自行关闭(这样它就可以关闭打开的文件或子线程,你永远不应该“杀死”你的线程)。
join方法只会等待线程终止,不会强制线程关闭。
我建议更改您的never_stop方法来检查时间和return/或raise时间超过X限制时:
def never_stop():
time_started = time.time()
X = 2
while True:
if time.time() > time_started + X:
return # or raise TimeoutException()
print 'a' # do whatever you need to do
Run Code Online (Sandbox Code Playgroud)
这样你的线程将在X几秒后自行结束,你甚至可以在创建线程时传递 X 作为参数:
def never_end(X):
# rest stays the same, except for the X = 2
t1 = threading.Thread(target=never_stop, args=(2,))
Run Code Online (Sandbox Code Playgroud)
args是一个元组,它的内容将作为参数传递给target函数。
小智 5
从文档中:
如果timeout存在该参数而没有该参数None,则它应该是一个浮点数,以秒为单位(或其秒数)指定操作的超时时间。与join()往常一样None,您必须isAlive()在之后调用join()以确定是否发生了超时–如果线程仍然存在,则join()调用超时。
| 归档时间: |
|
| 查看次数: |
16017 次 |
| 最近记录: |