2017-09-22 1 views
0

Ich versuche, ein Scheduler-Skript für Slurm-Jobs in Python zu schreiben.Wie starten Sie Threads in Python, die fortgesetzt werden, wenn der Elternprozess beendet wird?

Grundsätzlich habe ich ein Skript in einer Funktion enthalten, nennen wir es job_array_scheduler(), die eine time.sleep() Schleife enthält. Dies wird voraussichtlich einen Tag oder länger dauern. Ich möchte in der Lage sein, diese Funktion als einen separaten Thread von innerhalb Python zu starten, so dass ich dann die Sitzung beenden kann, und diese Sache wird weiter ausgeführt.

habe ich versucht, es wie so tun:

import threading 
scheduler_thread = threading.Thread(target=job_array_scheduler, args=args, daemon=True) 
scheduler_thread.start() 

aber diese verlässt, wenn ich die Python-Sitzung beenden (das heißt nur mit exit).

Wie ich dieses Problem umgehen, halten den oben genannten Thread am Leben, damit ich die Python-Sitzung beenden kann oder sogar von meinem Benutzer anmelden?

Die einzige Möglichkeit, die ich denken kann ist das Schreiben ein anderes Skript um die oben einzuwickeln, also kann ich es im Hintergrund von der Shell laufen so etwas wie python wrapper_script.py & tun, aber ich würde lieber vermeiden, dass, wie ich hätte zu schreibe ein separates äußeres Skript für jeden Job, den ich machen möchte.

+0

Verwenden Prozesse mit 'statt Fäden multiprocessing' (die in Python, wie Sie trotzdem dank der GIL erwarten nicht funktionieren) – GPhilo

Antwort

0

Sie den Vorgang nicht beenden (threads ist Teil des Prozesses, und es ist nicht überleben kann). Was Sie wollen, ist daemonize (or detach) der Prozess.

Verwandte Themen