Ich habe eine einfache Funktion geschrieben, um Jobs mit Abhängigkeiten zu verfolgen. Der genaue Code ist nicht wichtig, aber die Art, wie ich es gemacht habe, ist eine Jobüberwachungsfunktion, die ich verzweige mit multiprocessing.Process
, ich sende und bekomme Jobs zu/von ihm mit zwei multiprocessing Queue
Objekte.Python Multiprocessing: Kill Worker bei Beenden
Es funktioniert gut, aber weil ich eine Endlosschleife verwenden, wenn der Elternprozess beim Beenden hängt, weil Python immer noch auf das Kind wartet. Gibt es eine gute Möglichkeit, einen Kindprozess sofort beim Beenden zu beenden? Vielleicht durch ein Signal?
Mein eigentlicher Code ist hier: https://gist.github.com/MikeDacre/e672969aff980ee950b9dfa8b2552d40 Ein vollständigeres Beispiel ist hier: http://nbviewer.jupyter.org/github/MikeDacre/python-cluster/blob/cluster/tests/local_queue.ipynb
Ein Spielzeug Beispiel wahrscheinlich besser ist, aber:
import multiprocessing as mp
from time import sleep
def runner():
while True:
sleep(2)
runner = mp.Process(target=runner)
runner.start()
exit()
Das glücklich hängt bis Ctrl-C trat ein.
Ich glaube nicht, Signalfang funktioniert, da keine Signale am normalen Ausgang gesendet werden. Gibt es eine Möglichkeit, exit()
zu fangen? Wenn nicht, gibt es eine Möglichkeit, einen Prozess so zu erstellen, dass er auf natürliche Weise beendet wird?
Sie könnten nach der Eltern-PID in EnumProcesses suchen anstatt nach "while True". –
@ g.d.d.c Ich weiß nicht, wie man EnumProcesses verwendet, ist das ein Teil des Multiprocessing? –