为何在Jupyter Notebook中pool.imap()无法执行任何任务?
问题分析与解决
你的代码运行时无输出且持续卡住,甚至无法关闭内核,核心原因是Windows系统下Python多进程的启动特性:Windows没有Unix的fork机制,子进程会重新导入整个脚本模块,若缺少主程序入口判断,子进程会重复创建进程池,陷入无限进程创建的死循环,最终导致程序卡死。
修复后的代码
import multiprocessing as mp def add1(x): return x + 1 if __name__ == '__main__': pool = mp.Pool(processes=10) for x in pool.imap(add1, [1,2,3]): print(x) pool.close() pool.join() # 建议添加,确保主进程等待所有子进程执行完毕
关键说明
- 必须用
if __name__ == '__main__':包裹创建进程池和执行任务的代码,确保只有主进程才会初始化进程池,子进程不会重复执行这段逻辑 pool.join()能让主进程等待所有子进程完成任务后再退出,避免子进程变成僵尸进程- 若在Jupyter Notebook等交互式环境中运行,多进程兼容性较差,建议转用普通
.py脚本执行
内容的提问来源于stack exchange,提问作者cszzzZ
相关产品推荐
相关产品推荐

