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

远程服务器断开连接后如何恢复tqdm进度条显示

tqdm 断连后进度恢复方案

tqdm 本身内置了支持进度持久化、断点续显的相关参数,以下是两种可直接落地的实现方案:

方案一:手动持久化进度到本地文件

你可以搭配 initial 参数和自定义持久化逻辑,实现断连后完全恢复进度展示,代码修改量极小:

import json
from tqdm import tqdm

# 自定义进度持久化文件路径,放在进程可正常读写的目录即可
PROGRESS_RECORD = "./tqdm_progress.json"
# 启动时先读取已有进度,无历史记录则默认从0开始
current_progress = 0
try:
    with open(PROGRESS_RECORD, "r", encoding="utf-8") as f:
        current_progress = json.load(f)["idx"]
except (FileNotFoundError, json.JSONDecodeError):
    pass

# 必须指定total参数,才能正确计算进度比例
for idx, data in tqdm(enumerate(dataloader),
                      disable=silence,
                      initial=current_progress,
                      total=len(dataloader)):
    # 原有业务逻辑写在这里
    # ------
    # 每次迭代更新持久化记录,也可以每10/100次迭代更新一次减少IO消耗
    with open(PROGRESS_RECORD, "w", encoding="utf-8") as f:
        json.dump({"idx": idx + 1}, f)

断连重连后,你可以直接读取持久化文件的数值知道当前进度,也可以单独运行一段简单代码恢复进度条展示,把读取到的进度值传入tqdm的initial参数即可。

方案二:直接输出tqdm日志到文件

如果不需要自定义持久化逻辑,也可以直接把tqdm的输出流指向日志文件,所有进度更新都会自动写入文件:

from tqdm import tqdm

# 打开日志文件用于写入进度
log_f = open("./tqdm_run.log", "a", encoding="utf-8")
for idx, data in tqdm(enumerate(dataloader),
                      disable=silence,
                      file=log_f,
                      total=len(dataloader)):
    # 原有业务逻辑
    ...

重连后执行tail -f ./tqdm_run.log就能实时看到最新的进度条输出,和原来在Jupyter里看到的效果一致。

额外优化建议

如果经常遇到SSH断连场景,推荐用tmux或screen这类终端复用工具启动Jupyter Lab或Python进程,就算SSH连接断开,下次重连后attach回原有会话,就能直接看到原本的进度条,不需要修改任何tqdm代码。

内容的提问来源于stack exchange,提问作者Андрей Севостьянов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:12:00