#1791·tqdm

process_map 在 tqdm 4.70.0 中低估了大于 1 的块大小的进度

作者: kartiksubbarao创建于 2026年8月14日更新于 2026年8月21日
  • 我已经标记了所有适用的类别:
    • 导致异常的错误
    • 视觉输出错误
  • 我已经访问了 [源网站], 并特别阅读了 [已知问题]
  • 我已经在 [问题跟踪器] 中搜索重复的问题
  • 我已经提到了版本号、操作系统和环境, 如适用:
Fedora 43
tqdm 4.70.0
Python 3.14.6 (main, Jun 11 2026, 00:00:00)
[GCC 15.2.1 20260123 (Red Hat 15.2.1-7)]
linux

在从 tqdm 4.69.1 升级到 4.70.0 后, 我发现了一个进度条回退问题。 以下是一个示例:

python
from tqdm.contrib.concurrent import process_map
def f(x): return x
if __name__ == "__main__": process_map(f, range(101), chunksize=10)

4.69.1 在 101/101 时正确完成 4.70.0 在 11/101 处 错误 完成。 我要求 ChatGPT 进行调查。 它在 Python 3.13.5 上重现了这个问题, 并将其追踪到 PR #1709, 特别是这个新的回调:

python
fut.add_done_callback(lambda _: pbar.update())

使用 process_map(..., chunksize=10), 每个 Future 代表最多 10 个输入项的一个块。 因此, 回调每个块都会增加一次条, 而总数仍然是项数。 对于 101 个项, ProcessPoolExecutor 创建了 11 个块, 因此条在 11/101 时结束。 如果这有助于解决问题, 我可以提供更多的测试详细信息。