contrib.concurrent.process_map 在无显式 chunksize 的情况下对未定义大小的迭代对象抛出 ValueError
作者: kenblu24创建于 2026年8月20日更新于 2026年8月20日
- 我已经标记了所有适用的类别:
- 引发异常的错误
- 视觉输出错误
- 我已经访问了 [源网站], 尤其是阅读了 [已知问题]
- 我已经在 [问题跟踪] 中搜索重复的问题
- 我已经提到了版本号、操作系统和环境, 如适用:
import tqdm, sys
print(tqdm.__version__, sys.version, sys.platform)4.70.0 3.13.3 (main, Jun 3 2025, 19:17:36) [GCC 11.4.0] linux
tl;dr:
在 tqdm==4.70.0 的最新稳定版本中, 将 未知大小 的生成器传递给 process_map() 会引发 ValueError:
File "lib/python3.13/site-packages/tqdm/contrib/concurrent.py", line 104, in _min_map_len
return min(n for it in iterables if (n := length_hint(it, -1)) >= 0)
ValueError: min() iterable argument is empty最小可重现示例
Python 3.13.3 (main, Jun 3 2025, 19:17:36) [GCC 11.4.0] on linux
>>> from tqdm.contrib.concurrent import process_map
>>> process_map(print, (i for i in range(5)))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
import platform
File ".venv/lib/python3.13/site-packages/tqdm/contrib/concurrent.py", line 252, in process_map
shortest_iterable_len = _min_map_len(iterables)
File ".venv/lib/python3.13/site-packages/tqdm/contrib/concurrent.py", line 104, in _min_map_len
return min(n for it in iterables if (n := length_hint(it, -1)) >= 0)
ValueError: min() iterable argument is empty请注意, length_hint(range(5), -1) 返回 4, 但 length_hint((i for i in range(5), -1) 返回 -1, 因为 length_hint 假定它不知道生成器的内容, 并返回指定的默认值 -1。
解释
tqdm.contrib.concurrent.process_map(fn, *iterables, chunksize=None) 尝试猜测 iterables 的大小, 并如果最短的迭代器长度超过 1000 则提示警告。它使用内置 operator.length_hint 来进行大小猜测。
内容来源: tqdm/tqdm