Python中链式ThreadPoolExecutor.map执行的进度

我一直在尝试编写一个为神经网络创建数据集的脚本。这需要我在CPU上运行一次耗时的计算,然后在GPU上进行快速计算。为了提高性能,我想在CPU上并行运行该步骤,并且由于资源方面的限制,我只能在GPU上运行一个线程。因此,我用两个ThreadPoolExecutor进行了设置,它们映射到输入并使用tqdm来跟踪进度。

我现在面临的问题是,tqdm的进度条仅在大约一半的计算完成后才会显示,而我完全不明白为什么会这样。在下面,您将看到一个再现此行为的代码片段。

import time
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor

exec1 = ThreadPoolExecutor(max_workers=2)
exec2 = ThreadPoolExecutor(max_workers=1)
list(tqdm(exec2.map(lambda _: time.sleep(1),exec1.map(lambda _: time.sleep(2),range(20))),total=20))

仅使用一个ThreadPoolExecutor时,进度条将按预期工作:

list(tqdm(exec1.map(lambda _: time.sleep(2),range(20)),total=20))

有人知道什么可能导致这种行为吗?

编辑:我做了一些测试,发现由exec2.map创建的集合仅在大多数条目已经生成之后才被更新。比较的动作会立即执行。

A1013737306 回答:Python中链式ThreadPoolExecutor.map执行的进度

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3102260.html

大家都在问