lancer des commandes python en parallele - Python - Programmation
Marsh Posté le 24-07-2014 à 22:04:22
Salut,
Plutot que d'utiliser os.system, tu devrais regarder du côté de subprocess.popen()
Tu passes tes arguments sous la forme d'une liste, et un nouveau process s'executant en arrière plan va être créé.
Contrairement à os.system, tu récupèreres la main immédiatement sans attendre la fin de l'exécution.
Tu peux ensuite en faire ce que tu veux: vérifier s'il est toujours vivant ou pas, attendre la fin de l'execution, communiquer via STDIN/STDOUT, etc...
Marsh Posté le 25-07-2014 à 11:35:45
ca semble me convenir ca me donne une truc du genre:
Code :
|
mais comment savoir que le process est en cours/terminé ?
Marsh Posté le 25-07-2014 à 12:25:15
monprocess1.poll retourne none sur mon process est en cours
monprocess1.poll retourne 0 su le process est terminé
Marsh Posté le 25-07-2014 à 15:21:23
C'est ca: None si en cours, ou bien le code retour de l'executable s'il est terminé (0 dans ton cas).
Je te conseille de bien lire la doc dispo:
https://docs.python.org/2/library/subprocess.html
Autre chose, plutot que de passer en paramètre ta commande directement et d'utiliser "shell=True", il est plutôt conseillé d'utiliser "shell=False" (et donc de passer en 1er paramètre de popen une liste avec comme 1er élément le chemin vers l'exécutable, puis comme éléments suivants les paramètres nécessaires à cet exécutable.)
Ca evite de lancer un autre process intermédiaire (bin/sh) qui lui même lance le process voulut, et d'une manière générale c'est une bonne habitude à prendre pour éviter des problèmes de sécurité dans certaines conditions.
Marsh Posté le 24-07-2014 à 17:17:51
Bonjour,
je souhaite ecrire un code qui recupere quotidiennement des fichiers sur un parc de serveurs (via rsync lancé par os.system). J'ai un grosse bande passande sur le site ou tourne mon programme et des petites bande passante sur les sites ou sont posés les serveurs.
J'aimerai donc pour éviter l'attente, que les rsync soit lancés par lots en parallele.
Auriez vous des conseils ?