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

为什么在Jupyter中使用multiprocessing时print语句不输出内容?

问题原因
  • 首先是Windows系统下多进程启动规则限制:Windows系统中multiprocessing默认使用spawn模式创建子进程,该模式要求所有进程创建逻辑必须放在if __name__ == '__main__'的保护块中。你当前的代码没有添加该保护,子进程启动时会重新导入整个主模块,不会执行目标sleep函数,这也是你看到的总运行时长只有0.14秒远低于预期1.5秒的核心原因,子进程根本没有正常执行目标逻辑。
  • 其次是Jupyter Notebook的输出捕获限制:Jupyter内核默认只会捕获主进程的标准输出,子进程的打印内容默认不会重定向到当前单元格的输出区域,即便子进程正常执行,print内容也不会显示在notebook界面中。
解决方案
  1. 首先给多进程代码添加if __name__ == '__main__'保护块,修正后的代码如下:
# -------------------------修正后的多进程代码--------------------------- # 
import multiprocessing
import time

def sleep(seconds):
    print("Sleeping {} second(s) ...".format(seconds))
    time.sleep(seconds)
    print("Done Sleeping...")

if __name__ == '__main__':
    start = time.perf_counter()
    processes = []
    for _ in range(10):
        p = multiprocessing.Process(target=sleep, args=[1.5])
        p.start()
        processes.append(p)

    for process in processes:
        process.join()

    finish = time.perf_counter()
    print("Finished in {} second(s) with multi-processing".format(round(finish-start,2)))
  1. 针对Jupyter输出捕获问题,可选择任意一种方案解决:
  • 改用concurrent.futures.ProcessPoolExecutor实现多进程逻辑,新版Jupyter对该库的子进程输出兼容性更好
  • 将代码保存为.py文件,直接使用本地Python解释器运行,可正常看到所有打印输出
  • 若必须在Jupyter中使用旧的multiprocessing.Process写法,可以手动将子进程的输出写入本地日志文件,后续读取文件查看输出内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:57:04