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

Python多进程无法启动求助:官方示例代码无输出

嘿,我之前在Jupyter Notebook里折腾multiprocessing的时候也碰到过一模一样的问题!明明代码是官方文档里的示例,就是看不到输出,当时差点以为自己哪里写错了😂

问题出在Jupyter的运行环境和普通Python脚本不一样:子进程的标准输出(stdout)默认不会和Notebook的输出区域关联起来,就算你调用了print,输出要么被缓冲住,要么直接没被Notebook捕获到。另外,虽然你已经加了if __name__ == '__main__':的判断(这在Windows系统上是必须的,避免进程递归创建),但输出的显示还是得特殊处理。

给你几个亲测有效的解决方案:

方案一:强制刷新输出缓冲区

在print函数里加上flush=True参数,强制把输出推送到stdout,这样Notebook就能捕获到内容了:

from multiprocessing import Process
def f(name):
    print('hello', name, flush=True)  # 加上flush=True
if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

方案二:使用日志模块输出

日志模块能更好地处理跨进程的输出,而且Notebook会捕获stderr的内容,所以可以试试这种方式:

from multiprocessing import Process, log_to_stderr
import logging

# 把日志定向到stderr,让Notebook能显示
log_to_stderr(logging.INFO)

def f(name):
    logging.info(f'hello {name}')

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

方案三:写入文件后读取输出

如果上面两种都没效果,可以把输出写到临时文件里,等子进程结束后再读取并显示:

from multiprocessing import Process
import tempfile
import os

def f(name, output_path):
    with open(output_path, 'w') as fp:
        fp.write(f'hello {name}')

if __name__ == '__main__':
    # 创建临时文件
    tmp_file = tempfile.NamedTemporaryFile(delete=False)
    tmp_path = tmp_file.name
    tmp_file.close()
    
    p = Process(target=f, args=('bob', tmp_path))
    p.start()
    p.join()
    
    # 读取并显示内容
    with open(tmp_path, 'r') as fp:
        print(fp.read())
    
    # 删除临时文件
    os.unlink(tmp_path)

你可以先试试方案一,最直接简单,大部分情况下都能解决问题。如果还是不行,再试试后面的方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:12:30