Question

    

Cette question a déjà une réponse ici:

         

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 donc je veux qu'il soit en mesure de cliquer sur un lien pour démarrer le travail, puis retourner la page retour à lui avec un message que le travail est en cours. Les résultats du travail seront envoyés par courriel plus tard pour lui.

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

if job == 1:
    run script in background: /path/to/script.py
    return 'Job is running'
Était-ce utile?

La solution

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

Cela commencera le sous-processus en arrière-plan. Votre script va continuer normalement.

Lisez la documentation .

Autres conseils

En l'utilisant une file d'attente de messages est certainement la voie à suivre si vous pensez à l'échelle à long terme. Envoyer un message à la file d'attente qui est en cours d'exécution en permanence en arrière-plan et écrire des gestionnaires d'emploi pour traiter les différentes sortes de messages.

Puisque vous utilisez Django, je pense que beanstalkd est un assez bon en forme. est un tutoriel assez agréable sur l'objet. Le premier commentaire dans cet article a aussi quelques bons conseils.

Personnellement, j'ai roulé avec un serveur personnalisé de file d'attente en mémoire écrit en Erlang, avec des liaisons Python écrit en C. Mais Redis semble que cela pourrait fonctionner comme un concurrent pour les futurs files d'attente / messagerie besoins. Espérons que cela aide!

subprocess.Popen est en effet ce que vous recherchez.

Bien que si vous trouvez que vous voulez commencer à communiquer un tas d'informations entre les sous-processus et le parent, vous pouvez envisager un fil, ou d'un cadre RPC comme Twisted.

Mais le plus probable ceux-ci sont trop lourds pour votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top