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

为什么multiprocessing.Process在Jupyter和Spyder中运行不符合预期?

多进程代码在Jupyter/Spyder环境下未正常执行的原因与解决方法

根本原因

  • Windows系统中multiprocessing默认采用spawn模式启动子进程,该模式要求子进程重新导入主模块以获取要执行的目标函数。Jupyter Notebook、Spyder的交互内核运行时不会将代码生成本地可导入的.py文件,子进程启动时无法定位到代码中定义的do_something函数,会直接启动失败,因此函数逻辑完全没有执行,join()方法立刻返回,最终总耗时只有零点几秒。
  • 你的代码缺少Windows平台运行多进程必须的if __name__ == '__main__'入口保护,子进程导入主模块时会重复执行进程创建代码,进一步触发运行异常。

解决办法

方案1:本地脚本运行(兼容性最好)

将代码写入独立的.py文件,添加入口保护后通过python 文件名.py命令执行,修改后的可运行代码如下:

import multiprocessing
import time

def do_something():
    print(f'Sleeping 5 second(s)...')
    time.sleep(5)
    print(f'Done Sleeping...') 

if __name__ == '__main__':
    start = time.perf_counter()
    p2 = multiprocessing.Process(target=do_something)
    p3 = multiprocessing.Process(target=do_something)

    p2.start()
    p3.start()

    p2.join()
    p3.join()

    finish = time.perf_counter()
    print(f'Finished in {round(finish-start, 2)} seconds')

运行后即可得到预期约5秒的耗时,同时输出子进程的打印内容。

方案2:交互环境测试方案

如果需要在Jupyter/Spyder中直接测试,可以先把do_something函数写入一个本地.py文件(例如my_func.py),再在交互环境中从该文件导入函数,同时保留if __name__ == '__main__'保护逻辑,子进程即可正常找到目标函数执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:15:01