You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ProcessPoolExecutor时出现BrokenProcessPool错误的原因咨询

问题原因分析

这个BrokenProcessPool错误的核心原因和Windows系统下多进程的spawn启动模式直接相关:

  • Windows系统中,ProcessPoolExecutor默认使用spawn模式创建子进程,该模式会重新导入主脚本作为__main__模块。
  • 你自定义的func函数定义在主脚本的全局作用域中,当子进程尝试反序列化这个函数时,会尝试从__main__模块加载它。但子进程重新运行主脚本时,多进程环境下的模块导入机制差异会导致函数的序列化/反序列化出现异常,进而引发子进程意外终止。
  • 而np.sum是numpy库的内置函数,它定义在numpy的专属模块中,而非主脚本的__main__模块,子进程可以正常导入numpy并获取该函数,因此不会出现问题。
解决方案

将自定义函数放到单独的Python模块中,比如创建utils.py文件:

# utils.py
import numpy as np

def func(x):
    return x + 1

然后在主脚本中导入该函数:

from concurrent.futures import ProcessPoolExecutor
import numpy as np
from utils import func

def main():
    data = np.arange(100).reshape(10,-1)
    with ProcessPoolExecutor() as executor:
        for result in executor.map(func, data):
            print(result)

if __name__ == '__main__':
    main()

这样子进程可以从独立模块中正确导入func,避免了__main__模块导入带来的兼容性问题。

内容的提问来源于stack exchange,提问作者Giwon Karai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:15:46