首页 > 解决方案 > 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()

标签: python-3.6

解决方案


推荐阅读