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

Windows环境下Jupyter Notebook中Python multiprocessing无法运行求助

解决Windows 10 Anaconda环境下Jupyter Notebook中multiprocessing.Pool卡住的问题

问题根源

Windows系统中multiprocessing默认采用spawn启动子进程,这会新建Python进程并重新导入主模块。但Jupyter Notebook的内核进程环境和普通脚本不同,__name__的处理逻辑导致子进程无法正确加载目标函数,最终引发代码卡住。而PyCharm(脚本运行环境)和Linux(默认用fork启动子进程)不受此问题影响。

可行解决方案

方法1:显式指定spawn上下文

在代码中明确指定spawn上下文启动进程池,同时确保函数定义在if __name__ == '__main__'代码块之外:

from multiprocessing import get_context

def f(x):
    return x*x

if __name__ == '__main__':
    with get_context('spawn').Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

方法2:将函数拆分到独立模块

把需要并行执行的函数保存到单独的.py文件中(比如命名为mp_functions.py):

# mp_functions.py
def f(x):
    return x*x

然后在Jupyter Notebook单元格中导入该函数并使用:

from multiprocessing import Pool
from mp_functions import f

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

方法3:改用concurrent.futures.ProcessPoolExecutor

concurrent.futures的进程池实现在Jupyter环境中兼容性更强,代码逻辑与multiprocessing.Pool接近:

from concurrent.futures import ProcessPoolExecutor

def f(x):
    return x*x

if __name__ == '__main__':
    with ProcessPoolExecutor(max_workers=5) as executor:
        results = list(executor.map(f, [1, 2, 3]))
        print(results)

方法4:用%run魔法命令执行脚本

把完整的多进程代码保存为.py文件(比如test_multiprocessing.py):

# test_multiprocessing.py
from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

然后在Jupyter Notebook单元格中用魔法命令运行该脚本:

%run test_multiprocessing.py

内容的提问来源于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 00:06:24