Einen Prozess ausführen und beenden, ohne zu warten, für Sie
In Python unter Windows: ich möchte ausführen von code in einem separaten Prozess. Und ich will nicht, dass die Eltern warten für Sie zu Ende. So probiert:
from multiprocessing import Process
from time import sleep
def count_sheeps(number):
"""Count all them sheeps."""
for sheep in range(number):
sleep(1)
if __name__ == "__main__":
p = Process(target=count_sheeps, args=(5,))
p.start()
print("Let's just forget about it and quit here and now.")
exit()
beginnt der untergeordnete Prozess und werden weiterhin ausgeführt. Allerdings, wenn die Eltern das Ende erreicht, es wartet noch für das Kind zu beenden.
Gibt es eine Möglichkeit, dass die Eltern aufhören, auch wenn das Kind laufen? Sicher, ich könnte einfach führen Sie eine neue python-interpreter mit subprocess.Popen
- und Futtermittel auf es die Schafe-zählen als separates Skript.
Immer noch, es ist das ganze Modul für die Wiedergabe der Abläufe von Python-code, also würde ich gerne nutzen, dass anstelle der hacken auf der OS. Auch wäre es toll, wenn der selbe code überall funktioniert, wo Python macht, nicht nur auf Windows.
- Um hier, ich sehen in der Regel das gegenteilige problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
subprocess
Modul als andere subprocess control-Methoden (os.system, os.spawn*, os.popen*, popen2., Befehle.) sind mittlerweile veraltet:Finden Sie in der Python-doco, vor allem P_NOWAIT Beispiel.
Müssen Sie starten Sie ein neues Python-interpreter in den Teilprozess, so "foo.exe" oben wird wahrscheinlich sein "python.exe".
EDIT:
Nachdem ich gerade überprüft, das multiprocessing-Modul-Dokumentation:
Sieht es aus wie Sie sollten in der Lage sein zu rufen
cancel_join_thread()
um das Verhalten, die Sie wünschen. Ich habe noch nie verwendet diese Methode (und wurde nicht bewusst von seiner Existenz, bis vor einer minute!), so sicher sein, lassen Sie uns wissen, wenn es für Sie arbeitet.import *
.Können Sie erklären, den Prozess als daemon mit
p.daemon = True
. Als http://docs.python.org/2/library/threading.html#thread-objects sagt: "Die Bedeutung dieser Flagge ist, dass die gesamte Python-Programm beendet, wenn nur daemon threads sind Links."Unter Linux könnte man
fork
aber das funktioniert nicht auf Windows. Ich denke, der einfachste Weg ist, um einen neuen Python-Prozess, indem Sie Ihrecount_sheeps
in eine separate Datei undPopen('python count_sheeps.py')
Können Sie immer einen neuen thread starten, und rufen Sie myNewThread.daemon(True) aufrufen, bevor Sie die start () - Methode.
Diesem thread wird weiter ausgeführt, wenn der Hauptprozess beendet wird.