processus de ponte de python
im fraie un script qui s'exécute pendant une longue période à partir d'une application web comme ceci:
os.spawnle(os.P_NOWAIT, "../bin/producenotify.py", "producenotify.py", "xx",os.environ)
le script est généré avec succès et il fonctionne, mais jusqu'à ce qu'il devient de plus je ne suis pas capable de libérer le port utilisé par l'application web, ou en d'autres mots, je ne suis pas en mesure de redémarrer l'application web. comment puis-je spawn hors d'un processus et le rendre totalement indépendant de l'application web?
c'est sur le système d'exploitation linux.
source d'informationauteur mark
Vous devez vous connecter pour publier un commentaire.
@Mark a précisé que c'est un système Linux, le script pourrait facilement se faire pleinement indépendant, c'est à dire, un démonpar suite de cette recette. (Vous pouvez également le faire à la mère après un
os.fork
et alors seulementos.exec...
le processus de l'enfant).Edit: pour clarifier certains détails wrt @marc commentaire sur ma réponse: les privilèges du super-utilisateur ne sont pas nécessaires pour "daemonize" un processus par le livre de recettes de recettes, ni est-il besoin de changer le répertoire de travail courant (si le code dans la recette ne le faire et de plus, ce n'est pas la partie cruciale -- c'est plutôt la bonne séquence logique de
fork
_exit
etsetsid
appels). Les différentsos.exec...
variantes qui ne pas fin ene
utiliser le processus parent de l'environnement, de sorte que la pièce est trop facile -- voir Python de documents en ligne.À l'adresse suggestions faites dans d'autres, les commentaires et les réponses: je crois
subprocess
etmultiprocessing
en soi n'est pas daemonize le processus de l'enfant, qui semble être ce que @mark besoins; le script pourrait le faire pour lui-même, mais depuis certains code a fairefork
s etsetsid
il semble plus lisible pour moi de garder la totalité de la ponte sur que le faible niveau de l'avion plutôt que de mélanger certains de haut niveau et à faible niveau de code dans le cadre de l'opération.Voici un très réduite et simplifiée de la version de la recette à l'URL ci-dessus, adapté pour être appelé dans le parent de frayer un démon enfant, de cette façon, le code peut être utilisé pour exécuter des non-Python exécutables tout aussi bien. Comme donné, le code doit répondre aux besoins @mark expliqué, il peut bien sûr être adapté à de nombreux égards -- je recommande fortement la lecture de la recette originale et de ses commentaires et de discussions, ainsi que les livres, il recommande, pour plus d'informations.
Vous pouvez utiliser le multitraitement de la bibliothèque d'appeler des processus. Un exemple de base est illustré ici: