2013-08-13 14 views
4

J'ai trois fichiers .py que je veux exécuter en même temps dans un fichier de script Python. J'ai d'abord appelé subprocess.call() trois fois (une fois pour chaque fichier .py) mais je me suis souvenu qu'il bloque jusqu'à ce que la commande soit terminée. J'ai essayé subprocess.Popen(['screen', 'python_file']) puisque je crois qu'il ne bloque pas mais quand je vérifiais les processus avec screen -ls il y avait seulement un processus fonctionnant. Comment faire fonctionner les trois programmes en même temps avec un script Python? Dois-je utiliser la bibliothèque multiprocessing ou multithreading? Edit: Les autres processus ne sont pas supposés se terminer car ils sont exécutés dans une boucle infinie. Voici exactement ce que j'avais dans mon fichier de script Python. J'utilise screen parce que chaque fichier .py a stdout connecté sur le terminal et je veux être en mesure de voir ce qui est connecté pour chacun d'eux.Exécuter plusieurs fichiers .py en même temps


subprocess.Popen(['screen', './submitter.py'])
subprocess.Popen(['screen', './worker.py'])
subprocess.Popen(['screen', './tester.py'])

+1

Oui multitraitement. – sihrc

+1

'Popen' fait déjà ce que vous voulez. Si vous ne pouvez voir qu'un seul processus, cela signifie simplement que les autres processus ont déjà terminé leur travail (ou peut-être qu'ils sont sortis en raison d'une erreur). – Bakuriu

+0

Cela fonctionne pour moi. Pouvez-vous nous montrer un exemple? – tdelaney

Répondre

7

Si vous souhaitez utiliser multiprocessing, vous pouvez essayer ceci:

import multiprocessing 

def worker(file): 
    #your subprocess code 


if __name__ == '__main__': 
    files = ["path/to/file1.py","path/to/file2.py","path/to/file3.py"] 
    for i in files: 
     p = multiprocessing.Process(target=worker(i)) 
     p.start() 
+0

Si un sous-processus déclenche une exception non interceptée, que se passera-t-il? –

+0

@JordanFeldstein Je ne suis pas exactement sûr de ce que vous entendez par 'uncaught exception', mais voici quelques documents sur les exceptions dans' subprocess': https://docs.python.org/2/library/subprocess.html#exceptions – enginefree

+0

@ sans moteur Cela fonctionne! Mais j'ai besoin que ces processus arrivent avec un nom de CMD différent par 'ps -ef'. S'il vous plaît veuillez vérifier cette question. http://stackoverflow.com/questions/43362708/run-multiple-python-scripts-concurrently-with-different-cmd-name –

Questions connexes