【发布时间】:2019-06-19 10:33:32
【问题描述】:
我想为一系列输入参数 (L) 并行化一个任务 (progresser())。每个任务的进度应通过终端中的单独进度条进行监控。我正在为进度条使用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)) 的屏幕截图。
版本:python==3.7.3、tqdm==4.32.1
【问题讨论】:
标签: python terminal multiprocessing progress-bar tqdm