python-3.6 - Python ThreadPoolExecutor 完成回调并引发异常
问题描述
我正在学习 Python 的concurrent.futures
模块并试图弄清楚如何从未来引发异常(如果有)并使用该add_done_callback
方法。
不确定调用futures.as_completed()
是否会阻塞主线程。这是这样做的方法吗?
def prepare_for_deployment(artifacts):
if len(artifacts) > 0:
threads = arg.threads
valid_artifacts = []
work = []
with futures.ThreadPoolExecutor(max_workers=arg.threads) as executor:
for artf in artifacts:
logger.info('[{bundle}] Performing artifact validation.', bundle=artf.name)
if validate_artifact(artf):
logger.info('[{bundle}] Validation passed.', bundle=artf.name)
valid_artifacts.append(artf)
if not arg.dry_run:
result = executor.submit(release_the_cracken, artf)
result.add_done_callback(callback_function)
work.append(result)
else:
logger.error('[{bundle}] Validation failed.', bundle=artf.name)
mark_deployment_as_failed()
for w in futures.as_completed(work):
if w.exception():
raise w.exception()
解决方案
推荐阅读
- c - 您可以使用 getchar() 从标准输入中读取可变长度字符串吗
- java - 在 Spring Security 中启用 jwt 后无法处理 @RestControllerAdvice 中的 FileTooLargeException
- c++ - 如何处理程序不支持的长浮点数?
- excel - DAX:在选择中运行计数不同
- python - 将 kivy/python 代码导出到 android 并且图片不会显示在手机上
- pyinstaller - 应用程序关闭后 Pyinstaller 无法执行脚本
- c# - 为 URL 超链接注册新应用程序 - Windows
- azure-devops - 为什么参数在 Azure yml 模板文件中不起作用
- python - 使用 Pandas 按多列分组
- r - 根据 R 中先前的观察重建客户历史记录