与此不同:Timeout on a function call
我正在尝试使线程(不是主线程)中的一行代码超时。
信号仅在主线程中起作用,所以我不能使用它。
我要限制的行是带有请求库的Web请求:
s.get("https://www.google.com/")
我不能使用内置的请求超时,因为它在某些情况下并不总是超时。
答案 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将被引发。超时可以是一个整数 或浮动。如果未指定超时或“无”,则没有限制 等待时间