Я хочу распараллелить задачу (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))
.
версии: python==3.7.3
, tqdm==4.32.1