複数のプログレスバーを同時に実行しているときにプログレスバー3.6.2を使用していて、正しく表示されません。彼らはお互いに「上に」書く。ここでマルチプロセッサコール内のプログレスバーがディスプレイ上で互いに上書きされています
は最小限の作業例です:
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
それぞれのスレッドが独自のプログレスバーを非同期に更新するためです。彼らはちょうどお互いの上に表示されているように見えます。
ループに入る前に盲目的に挿入してもうまくいきません(驚きはありません)。何が良い選択肢ですか?