python - Python ThreadPoolExecutor 终止所有线程
问题描述
我正在运行一段 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)
推荐阅读
- reactjs - 错误:在 index.js 中添加提供程序时挂钩调用无效
- python - 无法使用启动画面呈现 Coursera 登录页面
- c# - .AUTH Cookie 在表单身份验证过程中被丢弃 ASP.NET
- c++ - 无法在 C++ 中创建 oauth 1.0 签名
- interrupt - 在 STM32CUBEIDE 中启用可以中断丢失
- r - R:从命名向量中迭代地创建一个向量
- python - OpenZeppelin 的测试助手时间包是否有等效的 Web3.py/Brownie
- mysql - 生成一个附加列“session_age”,其中包含会话已经在 SQL 中进行的时间量
- html - 为什么 Chrome 和 Firefox 使用 mm/dd/yyyy 格式在 en-GB 语言环境中?
- git - 推送失败的android-studio项目