Comment faire pour déterminer le pid du processus qui a commencé par de l'os.système

Je veux commencer plusieurs sous-processus avec un programme, c'est à dire un module foo.py commence plusieurs instances de bar.py.

Depuis j'ai parfois l'arrêter manuellement, j'ai besoin de l'id de processus pour effectuer une commande kill.

Même si l'ensemble de l'installation est assez “sale”, est-il un bon pythonic façon à obtenir un processus de’ pid, si le processus est lancé via os.system?

foo.py:

import os
import time
os.system("python bar.py \"{0}\ &".format(str(argument)))
time.sleep(3)
pid = ???
os.system("kill -9 {0}".format(pid))

bar.py:

import time
print("bla")
time.sleep(10) % within this time, the process should be killed
print("blubb")
"c'est pourquoi le sous-processus Popen(["python", "bar.py", "arguments"]) est trop lent." -- avez-vous réellement mesuré? La question que vous avez lié affiche les différents cas et de toute façon la différence de temps est de quelques millisecondes.
Oui, j'ai mesuré. Il était autour de 20 à 30 ms, qui a été dans mon cas précis, trop lent, depuis que j'ai eu un défilement graphique, qui devait être mis à jour plusieurs fois par seconde. os.spawnl m'a donné la fonctionnalité désirée, même si elle a ajouté environ une seconde au début de chaque processus, mais sans s'y arrêter mon processus principal. Il n'est pas encore la solution idéale, mais pour mon cas bettern que subprocess.Popen.
Vous devriez l'ai mentionné dans la question (idéalement, avec un minimum de code exemple que d'autres personnes peuvent essayer). Méfiez-vous spawn hérite de toutes héritées des descripteurs de fichiers (Popen ferme (Python 3)). Pouvez-vous démarrer le processus avant de la main et de les mettre en veille et ensuite seulement de réactiver (envoi de données d'entrée ou un signal)? Pourquoi ne pouvez-vous pas utiliser bar.py script dans le même processus? btw, pourquoi spawn permettrait d'ajouter une seconde au démarrage d'un processus par rapport à Popen?
Quelques détails au sujet de mon programme: Une permanence (plusieurs fois par seconde) mise à jour de schéma défile de droite à gauche. Dans bar.py, plusieurs temps de calculs sont faits. Tandis que les calculs ne sont pas effectués, il est écrit “calcul” dans le diagramme. Si l'utilisateur effectue une entrée, les calculs doivent être résilié et les nouveaux calculs ont commencé. Il est moins important, que les résultats des calculs sont faits rapidement, que le schéma ne se déplacer en douceur. La raison de la seconde ne sont pas clairs pour moi.
Après avoir fait plusieurs autres modifications, je me suis rendu compte que je ne peux pas reproduire le plus de temps pour le démarrage d'un processus par Popen, ni la seconde lors du démarrage d'un processus par Popen. Je vais modifier la question pour faire la accepté de répondre à l'ajustement et de révoquer ma solution. Désolé de vous déranger, je n'ai aucune idée de où mes résultats précédents sont venus.

OriginalL'auteur Sebastian Werk | 2013-11-26