gpt4 book ai didi

python - 修复python多处理中多个进度条(tqdm)的跳转

转载 作者:行者123 更新时间:2023-12-04 14:19:21 35 4
gpt4 key购买 nike

我想为一系列输入参数( progresser() )并行化任务( L )。每个任务的进度应由终端中的单独进度条监控。我正在使用 tqdm进度条的包。以下代码在我的 Mac 上最多可用于 23 个进度条(L = list(range(23)) 及以下),但会产生从 L = list(range(24)) 开始的进度条的困惑跳跃。 .有谁知道如何解决这个问题?

from time import sleep
import random
from tqdm import tqdm
from multiprocessing import Pool, freeze_support, RLock

L = list(range(24)) # works until 23, breaks starting at 24

def progresser(n):
text = f'#{n}'

sampling_counts = 10
with tqdm(total=sampling_counts, desc=text, position=n+1) as pbar:
for i in range(sampling_counts):
sleep(random.uniform(0, 1))
pbar.update(1)

if __name__ == '__main__':
freeze_support()

p = Pool(processes=None,
initargs=(RLock(),), initializer=tqdm.set_lock
)
p.map(progresser, L)
print('\n' * (len(L) + 1))

作为它的一般外观示例,我提供了 L = list(range(16)) 的屏幕截图。以下。

multiprocessing progess bars

版本: python==3.7.3 , tqdm==4.32.1

最佳答案

当我将大小设置为 30 时,我没有任何跳跃。也许你有更多的处理器,可以有更多的 worker 在运行。

但是,如果 n 变大,由于块大小的性质,您将开始看到跳跃。

IEp.map将您的输入分成块大小并给每个进程一个块。如 n变大,您的块大小也变大,您的 ...... 是的 position (pos=n+1)!

注意:虽然 map 保留了返回结果的顺序。它的计算顺序是任意的。

n变大 我建议使用处理器 ID 作为查看每个进程进度的位置。

from time import sleep
import random
from tqdm import tqdm
from multiprocessing import Pool, freeze_support, RLock
from multiprocessing import current_process


def progresser(n):
text = f'#{n}'
sampling_counts = 10
current = current_process()
pos = current._identity[0]-1

with tqdm(total=sampling_counts, desc=text, position=pos) as pbar:
for i in range(sampling_counts):
sleep(random.uniform(0, 1))
pbar.update(1)

if __name__ == '__main__':
freeze_support()
L = list(range(30)) # works until 23, breaks starting at 24
# p = Pool(processes=None,
# initargs=(RLock(),), initializer=tqdm.set_lock
# )
with Pool(initializer=tqdm.set_lock, initargs=(tqdm.get_lock(),)) as p:
p.map(progresser, L)
print('\n' * (len(L) + 1))

关于python - 修复python多处理中多个进度条(tqdm)的跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56665639/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com