Comment lancer des processus en arrière-plan détachés en Python
L'exécution de processus en arrière-plan est cruciale pour les tâches de longue durée ou non interactives en Python . Le script shell d'origine utilisait l'opérateur "&" pour lancer des processus qui continueraient à s'exécuter même après la fin du script. En Python, pour obtenir un résultat similaire, il faut comprendre les démons et les modules appropriés pour la gestion des processus.
Utilisation du module de sous-processus
L'approche recommandée pour gérer les processus en arrière-plan en Python est le module de sous-processus. Bien que la solution de jkp soit fonctionnelle, le module de sous-processus offre plus de flexibilité et s'aligne sur les recommandations actuelles de la documentation.
Pour les commandes simples, l'utilisation du module de sous-processus imite l'opérateur "&" dans le script shell. Prenons l'exemple suivant pour démarrer un nouveau processus qui supprime un fichier en arrière-plan :
import subprocess subprocess.Popen(["rm", "-r", "some.file"])
Notes sur l'exécution
Appel de la méthode .communicate() sur le l'objet renvoyé par Popen bloquera le processus principal jusqu'à la fin du processus en arrière-plan. Si vous souhaitez que le processus en arrière-plan reste détaché, évitez d'appeler .communicate(). Voici une illustration de ce comportement :
import subprocess ls_output = subprocess.Popen(["sleep", "30"]) ls_output.communicate() # Blocks for 30 seconds
Pour des cas d'utilisation plus avancés, la documentation des sous-processus fournit des conseils complets sur la gestion des processus, y compris la redirection d'entrée/sortie et la gestion des erreurs.
Cela mérite d'être clarifié. cet « arrière-plan » dans ce contexte fait référence au concept shell d'exécution d'un processus sans bloquer son exécution, plutôt qu'au véritable concept de processus démon au sens du système d'exploitation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!