Multiprocessing und Print Ausgabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
theham
User
Beiträge: 2
Registriert: Freitag 19. Mai 2017, 06:45

Guten Morgen,
ich bastle gerade ein Script in dem ich das multiprocessing modul verwende. Grundsätzlich bin ich schon sehr mit meinem Ergebnis zufrieden, habe nur noch einen Schönheitsfehler der mich sehr stört.

Die Funktion welche als Prozess gestartet wird gibt zu beginn mittels print eine Info Zeile aus. Wenn ich meinen process pool auf 5 - 10 setzte klappt das auch noch wunderbar. Stelle ich allerdings 50 - 100 Prozesse zur verfügung klappt zwar technisch auch noch alles, nur passiert es dann gelegentlich dass die print ausgabe der prozesse teilweise gleichzeitig passiert. Ergebnis aus dem ganzen.... die Info welche pro prozess in einer Zeile landen sollte wird teilweise in einer Zeile ausgegeben.

Hier ein kleines Beispiel um dies zu veranschaulichen:

So sollte es eigentlich aussehen...
Zeile 01
Zeile 02
Zeile 03
Zeile 04
usw.

Wenn ich zu viele Prozesse auf einmal starte sieht die ausgabe in etwa so aus:
Zeile 01
Zeile 02
Zeile03
Zeile04
Zeile 05Zeile07
Zeile06


Mir ist dabei egal dass die Reihenfolge nicht stimmt, aber gibt es eine Möglichkeit irgendwie zu definieren dass ein Print immer in einer eigenen Ausgabezeile in der Shell landet?

glg Martin
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Hallo,




anscheinend gibt es bei multiprocessing die Möglichkeit einen Lock zu nutzen.
Wäre das die Lösung für dich?
http://stackoverflow.com/questions/1911 ... -in-python
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Wie es scheint, funktioniert print() nicht atomar. Bei sys.stdout.write(message + '\n') scheint dies dagegen der Fall zu sein. Jedenfalls hat dies bei mir bislang zum Erfolg geführt, wobei es dabei stets nur um Kosmetik ging und es nicht wichtig war, das dies auch immer gegeben ist.
theham
User
Beiträge: 2
Registriert: Freitag 19. Mai 2017, 06:45

Herzlichen Dank für die rasche Hilfe.

die Lösung von kbr macht genau das was ich wollte. Vielen Dank :)
Antworten