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

Python 3.9.8环境下Pool.starmap不终止、无打印输出问题求解

问题原因与修复方案

核心错误1:缩进错误

你提供的代码存在缩进问题,with get_context("spawn").Pool() as p:及后续所属代码块没有缩进在if __name__ == '__main__':的判断分支下。
Python使用spawn模式启动多进程时,子进程会重新导入整个主模块的代码,若Pool创建逻辑没有被if __name__ == '__main__':保护,子进程导入时会重复执行创建Pool的代码,陷入无限创建子进程的递归,最终导致程序卡住无输出。

错误2:缺少必要导入与函数定义

代码中使用的get_context需要提前从multiprocessing模块导入,任务函数add也需要提前定义,且add的定义必须放在if __name__ == '__main__'之前,否则子进程无法导入该函数执行任务。

不规范写法:冗余的资源释放操作

使用with上下文管理器管理Pool实例时,with块执行结束后会自动调用close()和join()方法释放资源,你后续手动调用这两个方法属于冗余操作,虽然不会直接导致卡住,但属于不必要的写法。


修正后可正常运行的代码

from multiprocessing import get_context

def add(x, y):
    return x + y

if __name__ == '__main__':
    with get_context("spawn").Pool() as p:
        tasks = [(1, 1), (2, 2), (3, 3)]
        print(p.starmap(add, tasks))

运行后会输出预期结果:[2, 4, 6]


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:03