如果一个线程出现异常,如何停止所有线程?

问题描述 投票:0回答:2

我目前正在使用 python 的并发.futures 库运行一个函数。它看起来像这样(我使用的是Python 3.10.1):

with concurrent.futures.ThreadPoolExecutor() as executor:

future_results = [executor.submit(f.get_pdf_multi_thread, ssn) for ssn in ssns]

for future in concurrent.futures.as_completed(future_results):
    try:
        future.result()
    except Exception as exc:
        # If there is one exception in a thread stop all threads
        for future in future_results:
            future.cancel()
        raise exc

这样做的目的是,如果其中一个线程出现任何异常,则停止其余线程并抛出异常。然而我不知道这是否正在做它应该做的事情(有时需要很多时间才能抛出我想要的异常,而有时它会很快抛出它)。你能帮我解决这个问题吗?谢谢你

python python-3.x concurrent.futures
2个回答
0
投票

0
投票

按照 Olvin Roght 的建议,我成功完成了任务

list(executor.map(f.get_pdf_multi_thread, ssns))
© www.soinside.com 2019 - 2024. All rights reserved.