gpt4 book ai didi

Python ThreadPoolExecutor 终止所有线程

转载 作者:行者123 更新时间:2023-12-03 13:23:28 27 4
gpt4 key购买 nike

我正在运行一段 python 代码,其中多个线程通过线程池执行程序运行。每个线程都应该执行一项任务(例如获取网页)。我想要做的是终止所有线程,即使其中一个线程失败。例如:

with ThreadPoolExecutor(self._num_threads) as executor:
jobs = []
for path in paths:
kw = {"path": path}
jobs.append(executor.submit(start,**kw))
for job in futures.as_completed(jobs):
result = job.result()
print(result)
def start(*args,**kwargs):
#fetch the page
if(success):
return True
else:
#Signal all threads to stop

有可能这样做吗?除非所有线程都成功,否则线程返回的结果对我来说毫无用处,因此即使其中一个失败,我想节省其余线程的一些执行时间并立即终止它们。实际的代码显然是在做相对冗长的任务,有几个失败点。

最佳答案

如果你已经完成了线程并想查看进程,那么这里的代码和平看起来非常有前途和简单,几乎与线程相同的语法,但使用多处理模块。
当超时标志到期时进程终止,非常方便。

import multiprocessing

def get_page(*args, **kwargs):
# your web page downloading code goes here

def start_get_page(timeout, *args, **kwargs):
p = multiprocessing.Process(target=get_page, args=args, kwargs=kwargs)
p.start()
p.join(timeout)
if p.is_alive():
# stop the downloading 'thread'
p.terminate()
# and then do any post-error processing here

if __name__ == "__main__":
start_get_page(timeout, *args, **kwargs)

关于Python ThreadPoolExecutor 终止所有线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62474014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com