2017-09-22 5 views
0

J'essaye d'écrire un script de planificateur pour des travaux de slurm dans python. Fondamentalement, j'ai un script contenu dans une fonction, appelons le job_array_scheduler(), qui contient une boucle time.sleep(). Cela devrait durer un jour ou plus. Je veux être capable de démarrer cette fonction comme un thread séparé depuis python, de sorte que je puisse quitter la session et que cette chose continue de fonctionner.Comment démarrer des threads en python qui vont continuer quand le processus parent est quitté?

J'ai essayé de le faire comme ceci:

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

mais sort quand je quitte la session python (i.e. juste avec exit). Comment puis-je contourner cela, pour garder le thread ci-dessus en vie afin que je puisse quitter la session python ou même déconnecter mon utilisateur?

La seule façon que je peux penser est écrit un autre script pour enrouler autour de ce qui précède, je peux courir en arrière-plan de la coquille faire quelque chose comme python wrapper_script.py & mais je préférerais éviter que je devrais écrire un script externe distinct pour chaque travail que je veux faire.

+0

Utilisez des processus avec 'multiprocessing' au lieu de threads (qui, en python, ne fonctionnent pas comme vous le souhaitez grâce au GIL) – GPhilo

Répondre

0

Ne quittez pas le processus (les threads font partie du processus et ne peuvent pas survivre). Ce que vous voulez, c'est daemonize (or detach) le processus.