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

Python multiprocessing:如何优化进程打印,实现整洁实时输出?

解决多进程进度输出混乱的问题

要实现控制台最多显示3行内容且各进程进度原地更新,核心思路是利用ANSI终端转义序列控制光标位置,让每个进程的输出固定在专属行,避免换行导致的混乱。

实现代码

import multiprocessing
import time
import sys

def foo(process_num):
    # 每个进程对应固定行,process_num为0/1/2,对应第1/2/3行
    for progress in range(101):
        # 光标定位到当前进程的目标行:先回到左上角,再向下移动指定行数
        sys.stdout.write(f"\033[H\033[{process_num+1}B")
        # 回车到行首,覆盖原有内容实现原地更新
        sys.stdout.write(f"\r进程{process_num+1} 进度: {progress}%")
        # 强制刷新缓冲区,确保内容实时显示
        sys.stdout.flush()
        time.sleep(0.05)

if __name__ == "__main__":
    # 先打印3个空行预留位置,确保控制台始终最多显示这3行进度
    print("\n" * 3)
    # 光标回到控制台左上角,准备接受进程输出
    sys.stdout.write("\033[H")
    sys.stdout.flush()
    
    # 启动3个进程,传递各自的行标识
    processes = [multiprocessing.Process(target=foo, args=(i,)) for i in range(3)]
    for p in processes:
        p.start()
    
    # 等待所有进程完成
    for p in processes:
        p.join()
    
    # 所有进程结束后,光标移到进度行下方,输出完成提示
    sys.stdout.write("\033[H\033[4B\n")
    sys.stdout.write("所有进程执行完成!\n")

关键细节说明

  • \033[H:将光标直接移动到控制台左上角(第1行第1列)
  • \033[{n}B:将光标向下移动n行,确保每个进程的输出固定在专属行
  • \r:回车到当前行的开头,覆盖原有内容,实现进度的原地更新
  • sys.stdout.flush():强制刷新输出缓冲区,避免因缓冲区积压导致的内容延迟显示

这种方式严格控制了输出位置,既能保证控制台始终只显示3行进度内容,又能让每个进程的进度百分比在原地实时更新,彻底解决输出混乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:55:10