我试图timeout
在到达方法后取消正在运行的线程concurrent.futures.wait
,但程序仍运行 10 秒中指定的时间if url == "url_3":
import concurrent.futures
from time import sleep, time
sources = ["url_1", "url_2", "url_3"]
def get_request_header(url: str) -> str:
if url == "url_1":
sleep(0.8)
if url == "url_2":
sleep(0.9)
if url == "url_3":
sleep(10)
return f"{url}-headers"
start = time()
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(get_request_header, url) for url in sources]
completed, uncompleted = concurrent.futures.wait(futures, timeout=1.5)
for future in uncompleted:
future.cancel()
for future in completed:
print(future.result())
print(time() - start)
如果您在cancel()之后打印并检查状态,那么它仍然存在running
并且实际上返回False
for future in uncompleted:
print(future)
print(future.cancel())
print(future)
需要通过timeout
参数限制线程的工作,让未完成的线程停止工作,这有什么问题吗?
我也尝试过as_completed
,但map
不提供通过。