Ich bin neu bei IPython und möchte Zwischenergebnisse auf stdout drucken, während IPython parallel Cluster-Funktionen ausgeführt werden. (Ich bin mir bewusst, dass dies bei mehreren Prozessen die Ausgabe beeinträchtigen kann, aber das ist gut - es ist nur zum Testen/Debuggen und die Prozesse, die ich ausführen würde, sind lang genug, dass eine solche Kollision unwahrscheinlich ist.) Dokumentation für IPython, kann jedoch kein Beispiel finden, in dem die parallelisierte Funktion druckt. Grundsätzlich bin ich nach einer Möglichkeit, die Druckausgabe der Teilprozesse auf die Haupt stdout, die IPython ÄquivalentDrucken in IPython parallelen Prozessen stdout
subprocess.Popen(... , stdout=...)
Druck innerhalb des Prozesses zu umleiten nicht funktioniert:
rc = Client()
dview = rc()
def ff(x):
print(x)
return x**2
sync = dview.map_sync(ff,[1,2,3,4])
print('sync res=%s'%repr(sync))
async = dview.map_async(ff,[1,2,3,4])
print('async res=%s'%repr(async))
print(async.display_outputs())
kehrt
sync res=[1, 4, 9, 16]
async res=[1, 4, 9, 16]
So ist die Berechnung korrekt ausgeführt wird, aber die print-Anweisung in der Funktion ff wird nie gedruckt, nicht einmal, wenn alle Prozesse returne haben d. Was mache ich falsch? Wie bekomme ich "Drucken" zur Arbeit?
Sehr hilfreiche Antwort. Gibt es eine Möglichkeit, die stdout-Ausdrucke während der Berechnung zu sehen? – spencerlyon2
ja - für Druckanweisungen, tun Sie einfach "für out in asyncresult.stdout: ausdrucken", was Sie jederzeit tun können, auch wenn die Ausgabe teilweise ist. – minrk
Gibt es eine Möglichkeit, dies zu erreichen, ohne auf den Quellcode zugreifen zu müssen? Es gibt eine Bibliothek, die ich verwende, die Protokollnachrichten in Threads druckt, und ich möchte, dass es während der Ausführung druckt. Müsste ich eine von IPythons Klassen erweitern, um dies zu tun? – hgcrpd