39 votes

Comment exécuter un autre script en Python sans attendre sa fin?

Je crée un petit tableau de bord pour un utilisateur qui lui permettra d'exécuter des tâches spécifiques. J'utilise Django et je veux qu'il puisse cliquer sur un lien pour démarrer le travail, puis lui renvoyer la page avec un message indiquant que le travail est en cours d'exécution. Les résultats du travail lui seront envoyés ultérieurement.

Je crois que je suis censé utiliser subprocess.Popen mais je n'en suis pas sûr. Donc, en pseudocode, voici ce que je veux faire:

 if job == 1:
    run script in background: /path/to/script.py
    return 'Job is running'
 

62voto

nosklo Points 75862
 p = subprocess.Popen([sys.executable, '/path/to/script.py'], 
                                    stdout=subprocess.PIPE, 
                                    stderr=subprocess.STDOUT)
 

Cela démarrera le sous-processus en arrière-plan. Votre script continuera à fonctionner normalement.

Lisez la documentation ici .

3voto

Aaron Maenpaa Points 39173

subprocess.Popen est bien ce que vous recherchez.

1voto

Sean Cavanagh Points 1156

Toutefois, si vous souhaitez commencer à communiquer un tas d'informations entre le sous-processus et le parent, vous pouvez envisager un thread, ou une infrastructure RPC telle que Twisted.

Mais très probablement ceux-ci sont trop lourds pour votre application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X