2016-10-04 6 views
0

Win 7 mal 64, Python 2.7, Anaconda 4.2.0, 5.1.0 IPythonIPython-Konsole zeigt keine Ausgaben an, zeigt aber andere?

ich & durch einige multiprocessing Tutorials arbeite traf ein Problem sofort, während in einer IPython Konsole arbeiten. Der Code unten ...

import multiprocessing 

print 'hello' 

def worker(): 
    """worker function""" 
    print 'Worker' 
    return 


jobs = [] 
for i in range(5): 
    p = multiprocessing.Process(target=worker) 
    jobs.append(p) 
    p.start() 

Ich erwarte ...

hello 
worker 
worker 
worker 
worker 
worker 

aber ich bin immer ..

hello 

Warum ist die Ausgabe von der worker Funktion nicht angezeigt in der IPython-Konsole?

EDIT: Wenn von der Anaconda-Befehlszeile ausgeführt wird, wird mit einem Syntaxfehler in der print 'Worker' Zeile beendet, aber wenn von einer Python-Konsole ausgeführt wird, wie erwartet ausgeführt, wenn ich weiterhin die Eingabetaste drücken.

EDIT 2: Jetzt funktioniert in Anaconda Befehlsfenster (Ich hatte das falsche Python installiert). Das Problem scheint nicht nur auf diesen Code beschränkt zu sein. Jede print-Anweisung in parallelisierten Funktionen wird nicht in der IPython-Konsole angezeigt.

+1

BT, erfordert SO 2 Zeilenumbrüche für Text in einer neuen Zeile angezeigt werden. Verwenden Sie Code-Formatierung, um das zu umgehen. – Carcigenicate

+0

Und ich vermute, dass ich, weil das Programm endet, bevor Sie den Arbeitern eine Chance geben, zu drucken. – Carcigenicate

+0

Sie können dies testen, indem Sie verhindern, dass das Programm irgendwie beendet wird, etwa indem Sie den Benutzer nach dem Starten der Jobs nach Eingabe fragen. – Carcigenicate

Antwort

0

Try this:

for i in range(5): 
    p = multiprocessing.Process(target=worker) 
    jobs.append(p) 
    p.start() 
    p.join() 

Ich vermute, dass ipython die Kindprozesse endet, wenn der Hauptprozess/Funktion durchgeführt wird, und die join sollte das verhindern.

+0

'Join()' hat keine Wirkung. Es scheint ein Problem der IPython-Konsole zu sein, dass nichts gedruckt wird, das sich in einer parallelisierten Funktion befindet – DrBwts