Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1467 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  lancer des commandes python en parallele

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lancer des commandes python en parallele

n°2234023
isanaud
Posté le 24-07-2014 à 17:17:51  profilanswer
 

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 ?

mood
Publicité
Posté le 24-07-2014 à 17:17:51  profilanswer
 

n°2234035
gui_yaum69
Posté le 24-07-2014 à 22:04:22  profilanswer
 

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...

n°2234047
isanaud
Posté le 25-07-2014 à 09:13:02  profilanswer
 

interessant, merci pour ta réponse, je teste

n°2234065
isanaud
Posté le 25-07-2014 à 11:35:45  profilanswer
 

ca semble me convenir ca me donne une truc du genre:

Code :
  1. monprocess1=subprocess.Popen(commande1, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell = True) 
  2. monprocess2=subprocess.Popen(commande2, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell = True) 
  3. monprocess3=subprocess.Popen(commande3, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell = True) 
  4. monprocess4=subprocess.Popen(commande4, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell = True)


mais comment savoir que le process est en cours/terminé ?

n°2234071
isanaud
Posté le 25-07-2014 à 12:25:15  profilanswer
 

monprocess1.poll retourne none sur mon process est en cours
monprocess1.poll retourne 0 su le process est terminé

n°2234077
gui_yaum69
Posté le 25-07-2014 à 15:21:23  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  lancer des commandes python en parallele

 

Sujets relatifs
Jeu de roulette en pythonLancer iexplore en "mode caché" via un vbs ?
Comment faire tourner une spirale avec python ?[Python] Tri tableau
[Python 3] Lister fichiers présents sur un serveur HTTP[Python 3.X] Utilisation de urllib
Python AttributeError[PYTHON] Plantage suspect!
[python] Afficher primitive/figure au premier plan (Windows)aide pour base de données python 2.7
Plus de sujets relatifs à : lancer des commandes python en parallele


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR