Я использую progressar 3.6.2 и получаю неправильный вывод на дисплей при одновременном запуске нескольких передовых панелей. Они пишут «сверху» друг друга.progressbars внутри многопроцессорных вызовов переписывают друг друга на дисплее
Вот минимальный рабочий пример:
import multiprocessing as mp
import progressbar
def run_many:
p = mp.Pool(mp.cpu_count(), maxtasksperchild=1)
results = p.map(run_one, args_list)
p.close()
p.join()
def run_one:
with progressbar.Progressbar(max_value=5000) as bar:
for i in range(5000):
do_heavy_lifting(i)
bar.update(i)
я получаю выход, который одна линия длинная, но колеблется между чем-то, что выглядит как
30% (1500 of 5000) |#######------------| Elapsed Time: 0:00:39 Time: 0:00:39
и
29% (1400 of 5000) |######-------------| Elapsed Time: 0:00:39 Time: 0:00:39
как каждый поток обновляет свой собственный индикатор выполнения асинхронно. Похоже, они просто показывают друг на друга.
Слегка вставлять разрыв линии перед входом в петлю не работает (не удивительно); что лучше?