python – 检测concurrent.futures中的失败任务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 检测concurrent.futures中的失败任务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1130字,纯文字阅读大概需要2分钟。
内容图文
![python – 检测concurrent.futures中的失败任务](/upload/InfoBanner/zyjiaocheng/805/2287a5af971540d79f652d76bd8630ac.jpg)
我一直在使用concurrent.futures,因为它有一个简单的界面,让用户可以轻松控制线程/进程的最大数量.但是,似乎concurrent.futures隐藏了失败的任务,并在所有任务完成/失败后继续主线程.
import concurrent.futures
def f(i):
return (i + 's')
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
fs = [executor.submit(f, i ) for i in range(10)]
concurrent.futures.wait(fs)
在任何整数上调用f都会导致TypeError.但是,整个脚本运行得很好,并以代码0退出.有没有办法让它在任何线程失败时抛出异常/错误?
或者,有没有更好的方法来限制线程/进程数量而不使用concurrent.futures?
解决方法:
concurrent.futures.wait将确保完成所有任务,但它不会检查成功(返回的内容)与失败(异常引发并且未在工作程序函数中捕获).为此,您需要在每个Future上调用.result()(这将导致它从任务中重新引发异常,或者生成返回值).还有其他方法可以在没有实际提升主线程的情况下进行检查(例如.exception()),但.result()是最简单的方法.
如果你想重新加注,最简单的方法就是用以下代码替换wait()调用:
for fut in concurrent.futures.as_completed(fs):
fut.result()
当期货完成时,它将处理结果,如果发生了,则立即提出异常.或者,您继续使用wait,以便在检查任何任务上的异常之前完成所有任务,然后直接迭代fs并在每个上调用.result().
内容总结
以上是互联网集市为您收集整理的python – 检测concurrent.futures中的失败任务全部内容,希望文章能够帮你解决python – 检测concurrent.futures中的失败任务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。