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

导入模块中的Python多进程无法运行问题排查

问题原因

Windows下Python的多进程采用spawn模式启动子进程,启动时会重新导入相关模块,因此通常在主启动模块里用if __name__ == '__main__'包裹多进程启动代码,防止无限递归。

但你在tmp1.py的calculate函数内部加了这个判断:当tmp2.py作为主程序运行时,tmp1.py的模块名是tmp1而非__main__,所以判断分支里创建进程池、执行任务的代码完全没运行,直接返回了空列表。

而把代码复制到tmp2.py时,主模块的__name__是__main__,判断分支正常执行,自然能得到正确结果。

修复方法

删掉calculate函数里的if __name__ == '__main__'判断,这个判断只应该放在主启动模块的入口处,不是被导入模块的函数内部。

修改后的tmp1.py代码:

from multiprocessing import Pool

def mul2(x):
    return [a*2 for a in x]

def calculate(func, x):
    r = []
    p = Pool(2)
    r.append(p.map(func, x))
    p.close()
    p.join()
    return r

tmp2.py保持原样即可,运行后会输出预期的[[[2, 4, 6], [8, 10, 12], [14, 16, 18]]]。

如果需要直接运行tmp1.py测试,可以在文件末尾添加主模块判断的测试代码:

if __name__ == '__main__':
    test_input = [[1,2],[3,4]]
    print(calculate(mul2, test_input))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:57:17