【发布时间】:2020-10-09 22:17:59
【问题描述】:
我正在运行一段 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
有可能吗?除非所有线程都成功,否则线程返回的结果对我来说毫无用处,因此即使其中一个失败,我想节省其余线程的一些执行时间并立即终止它们。实际的代码显然是在做相对冗长的任务,有几个失败点。
【问题讨论】:
-
回答了我的问题,但没有解决我的问题。不过谢谢
-
不要将“线程”与“任务”混为一谈。线程是操作系统中的代理(即它们运行代码)。任务是需要完成的事情。线程池执行器创建并管理它的自己的线程——你不应该_弄乱它们——执行你
submit(...)给它的任务。 -
我对 ThreadPoolExecutor 不太熟悉,但也许我可以给你一个提示,我通常在 python 2.7 中结束线程的方式。
-
如果可能,使用所有工作线程都可以看到的全局变量或类属性,并在每个工作线程的末尾添加条件,如果作业成功或未设置全局变量。 ej PASS=True/False,并添加检查循环,或者如果在循环内进行工作,则添加检查此变量状态的条件,当任何线程读取 PASS=False 时,应遵循返回语句,这工作线程可以结束的方式..,
标签: python multithreading threadpoolexecutor concurrent.futures