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

Windows下Jupyter Notebook中子进程print输出无法显示的解决问询

解决Jupyter Notebook中torch多进程子进程输出不显示的问题

问题原因

Windows系统中,torch.multiprocessing创建的子进程标准输出(stdout)默认关联启动Jupyter的控制台(如Anaconda提示符),而非Notebook的输出单元格,因此子进程的print内容只会出现在黑窗口,不会显示在Notebook里。

解决方案

方法1:用队列传递子进程输出

通过多进程队列让子进程把输出内容传递给主进程,再由主进程打印到Notebook中。

修改.ipynb文件内容如下:

from tasks import task
import torch.multiprocessing as mp
import sys

def wrapped_task(queue):
    # 自定义输出类,将内容写入队列
    class QueueWriter:
        def __init__(self, q):
            self.q = q
        def write(self, msg):
            self.q.put(msg)
        def flush(self):
            pass
    
    sys.stdout = QueueWriter(queue)
    task()
    sys.stdout = sys.__stdout__  # 恢复原标准输出

if __name__ == '__main__':
    print('Hello from main process')
    queue = mp.Queue()
    process = mp.Process(target=wrapped_task, args=(queue,))
    process.start()
    
    # 读取队列内容并打印
    while True:
        try:
            msg = queue.get(timeout=2)
            print(msg, end='')
        except mp.queues.Empty:
            break
    
    process.join()
    print('Hello again from main process')

tasks.py保持不变,子进程的print内容会通过队列传递到主进程,最终显示在Notebook输出单元格中。

方法2:重定向子进程输出到主进程文件描述符

直接让子进程的输出写入主进程的标准输出流,实现内容同步显示:

from tasks import task
import torch.multiprocessing as mp
import os
import sys

def wrapped_task(fd):
    # 重定向子进程stdout到主进程的文件描述符
    sys.stdout = os.fdopen(fd, 'w')
    task()
    sys.stdout.close()

if __name__ == '__main__':
    print('Hello from main process')
    # 复制主进程stdout的文件描述符
    fd = os.dup(sys.stdout.fileno())
    process = mp.Process(target=wrapped_task, args=(fd,))
    process.start()
    process.join()
    os.close(fd)
    print('Hello again from main process')

验证效果

运行修改后的Notebook代码,输出将变为:

Hello from main process
Hello from child process
Hello again from main process

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:54:21