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

Python多进程任务状态行内实时更新的实现方案咨询

Python多进程任务状态行内实时更新的实现方案咨询

我有一个基于多进程的Python脚本,用来执行带参数的任务函数,需求是打印每个任务的启动、结束时间以及耗时。简单场景下的代码大致如下:

import concurrent.futures
import datetime

def do_stuff(arg):
    start_time = datetime.now()
    # 执行任务逻辑
    end_time = datetime.now()
    
    return f"Finished task with arg {arg} in {end_time-start_time}"

if __name__ == '__main__':
    with concurrent.futures.ProcessPoolExecutor() as executor:
        results = []
    
        for arg in args: # args是待传入的参数列表
            print(f"Starting task with arg {arg}")
            results.append(executor.submit(do_stuff, arg))

        for f in concurrent.futures.as_completed(results):
            print(f.result())

假设传入的参数是arg1、arg2、arg3和arg4,任务的实际启动与结束顺序如下:

  1. 带arg1的任务启动
  2. 带arg2的任务启动
  3. 带arg3的任务启动
  4. 带arg2的任务结束
  5. 带arg4的任务启动
  6. 带arg1的任务结束
  7. 带arg4的任务结束
  8. 带arg3的任务结束

当前代码运行后,终端输出大概是这样的:

Starting task with arg arg1
Starting task with arg arg2
Starting task with arg arg3
Finished task with arg arg2 in mm:ss
Starting task with arg arg4
Finished task with arg arg1 in mm:ss
Finished task with arg arg4 in mm:ss
Finished task with arg arg3 in mm:ss

但我想要实现的效果是:每个任务的启动和结束信息显示在同一行,终端输出会随着任务推进实时更新,每一步的终端状态如下:

  1. 带arg1的任务启动后:
Starting task with arg arg1
  1. 带arg2的任务启动后:
Starting task with arg arg1
Starting task with arg arg2
  1. 带arg3的任务启动后:
Starting task with arg arg1
Starting task with arg arg2
Starting task with arg arg3
  1. 带arg2的任务结束后:
Starting task with arg arg1
Starting task with arg arg2 - finished in mm:ss
Starting task with arg arg3
  1. 带arg4的任务启动后:
Starting task with arg arg1
Starting task with arg arg2 - finished in mm:ss
Starting task with arg arg3
Starting task with arg arg4
  1. 带arg1的任务结束后:
Starting task with arg arg1 - finished in mm:ss
Starting task with arg arg2 - finished in mm:ss
Starting task with arg arg3
Starting task with arg arg4
  1. 带arg4的任务结束后:
Starting task with arg arg1 - finished in mm:ss
Starting task with arg arg2 - finished in mm:ss
Starting task with arg arg3 
Starting task with arg arg4 - finished in mm:ss
  1. 带arg3的任务结束后:
Starting task with arg arg1 - finished in mm:ss
Starting task with arg arg2 - finished in mm:ss
Starting task with arg arg3 - finished in mm:ss
Starting task with arg arg4 - finished in mm:ss

我了解可以用ANSI转义码移动终端光标,但这种方式需要存储每个任务对应的行位置,任务结束时让光标回到对应行重写内容,还要跟踪“当前行”来控制光标上下移动,实现起来很繁琐。所以想请教大家,有没有现成的工具、库或者方案可以直接实现这种效果?非常感谢!

备注:内容来源于stack exchange,提问作者Victor S. P. Carpes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:43:03