Ich benutze Fortschrittsbalken 3.6.2, und erhalten falsche Anzeige Ausgabe, wenn mehrere Fortschrittsbalken gleichzeitig ausgeführt werden. Sie schreiben "übereinander".Fortschrittsbalken in Multiprocessing-Aufrufen überschreiben einander auf dem Display
Hier ist ein Mindestarbeitsbeispiel:
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)
ich Ausgabe, die eine Linie lang, aber oszilliert zwischen etwas, das
30% (1500 of 5000) |#######------------| Elapsed Time: 0:00:39 Time: 0:00:39
und
29% (1400 of 5000) |######-------------| Elapsed Time: 0:00:39 Time: 0:00:39
, da jeder Thread seinen eigenen Fortschrittsbalken asynchron aktualisiert. Es sieht so aus, als ob sie nur übereinander angezeigt werden.
Blindes Einfügen eines Zeilenumbrüche vor dem Einstieg in die Schleife funktioniert nicht (keine Überraschung); Was ist eine bessere Option?