多线程脚本中的超时

时间:2019-03-14 03:01:07

标签: python multithreading

与此不同:Timeout on a function call

我正在尝试使线程(不是主线程)中的一行代码超时。

信号仅在主线程中起作用,所以我不能使用它。

我要限制的行是带有请求库的Web请求:

s.get("https://www.google.com/")

我不能使用内置的请求超时,因为它在某些情况下并不总是超时。

1 个答案:

答案 0 :(得分:0)

如果您正在使用python的标准线程库,我认为没有一种简单的方法可以在线程启动后终止它。 thread(:D)中提到了一些选项,您可以尝试。 如果您不在乎线程何时完成而只想控制回来,则可以在join方法中提供超时。如下所示,

th = threading.Thread(target=f)
th.start()    #starts thread
th.join(timeout=10) # you get control back in 10 seconds, but thread could still be running
if th.is_alive():
    print("still alive")

(我喜欢)其他选择是使用concurrent库,

from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=1) as executor:
    future = executor.submit(pow, 323, 1235)
    print(future.result(timeout=10))    #within 10 seconds if result isn't returned you will get TimeoutError

根据文档报价结果(超时=无)

  

如果通话未在超时秒内完成,则   parallel.futures.TimeoutError将被引发。超时可以是一个整数   或浮动。如果未指定超时或“无”,则没有限制   等待时间