L'exécution de plusieurs scripts Python
Je voudrais créer un simple programme en Python qui va exécuter simultanément 2 indépendant de scripts. Pour l'instant, les deux scripts, il suffit d'imprimer une séquence de chiffres, mais mon intention est d'utiliser ce programme pour exécuter simultanément un peu de Twitter en streaming des programmes dans l'avenir.
Je crois bien que je besoin pour utiliser subprocess.Popen
mais je ne peux pas tout à fait obtenir ma tête autour de quels arguments je dois mettre dedans. Il y a une question similaire sur StackOverflow mais le code à la condition (a collé ci-dessous) n'a pas d'imprimer quoi que ce soit. Je vous remercie de votre aide.
Mes fichiers sont:
thread1.py
thread2.py
import subprocess
subprocess.Popen(['screen', './thread1.py']))
subprocess.Popen(['screen', './thread2.py'])
- N'est-il pas plus simple et plus évident à faire fonctionner en parallèle les processus à l'aide des pipelines sous Unix? I. e.
./thread1.py;./thread2.py
- Oui, normal des processus Unix pipeline fera l'affaire. Alors que juste un heads-up, si les opérations i/o bound, vous devriez envisager d'utiliser des threads sur les processus en Python.
- Merci, j'ai essayé ce que vous avez suggéré: python ./thread1.py;./thread2.py mais je suis le seul à en obtenir les numéros imprimés à partir de la première script et je voudrais les deux scripts à exécuter en même temps.
- En raison de la canalisation d'utilisation vous devez exécuter vos scripts distincts python programmes:
python thread1.py;python thread2.py
. Dans votre cas, je suppose que vous n'avez pas le python preambula, de sorte que vos scripts nécessitent d'utiliser l'interpréteur python, comme je l'ai dit ci-dessus. C'est la raison, pourquoi vous second script ne fonctionne pas. Attention vous devez être dans le répertoire de vos fichiers se trouvent dans, et vous n'avez pas besoin de le "./" préfixe qui indique que vous pour prendre le fichier à partir du dossier. - Merci, cela fonctionne!
- J'ai essayé d'utiliser le ci-dessus Unix méthode pour les deux scripts de téléchargement Twitter délais. Malheureusement, il semble que les scripts ne sont pas exécutées en parallèle. Chacun de mes scripts construit un distinct table MySQL et je peux voir que la table pour le deuxième script ne commence la construction après je interrompre le premier script. Est-ce le cas que @AashishP mentionné et que je devrais être à l'aide de threads?
- Quelqu'un peut-il m'aider à le modifier pour fonctionner dans Windows (10)? Je suis actuellement en train de faire cela dans ma fenêtre d'Invite de Commande: C:/Python27/Scripts>pip NewCode5.1.py; pip NewCode5.2.py j'ai mis ces deux .py fichiers dans les Scripts du dossier, qui est aussi celle où j'ai déjà eu à utiliser le pip de commande. J'obtiens l'erreur suivante: 'ERREUR: commande inconnue NewCode5.1.py;' Toutes les suggestions?
Vous devez vous connecter pour publier un commentaire.
Utilisation
supervisord
supervisord est le système de contrôle de processus dans le but d'exécuter plusieurs scripts ligne de commande.
Il dispose de:
Cette solution ne fonctionne que sur les *nix en fonction des systèmes, il n'est pas disponible sur Windows.
Comme wanderlust mentionné, pourquoi voulez-vous faire de cette façon et non pas via la ligne de commande de linux?
Sinon, la solution que vous publiez est en train de faire ce qu'il est censé, je.e, vous le faites à la ligne de commande:
Cela va ouvrir une session écran et exécuter le programme et de sortie à l'intérieur de cette session écran, de sorte que vous ne verrez pas la sortie sur votre terminal directement. Pour dépanner votre sortie, juste exécuter les scripts sans l'appel d'écran:
Contenu de thread1.py:
Contenu de thread2.py:
Alors n'oubliez pas de le faire sur la ligne de commande:
Vous pouvez aussi simplement ouvrir plusieurs fenêtre d'Invite de Commande pour exécuter plusieurs programmes Python à la fois - il suffit d'exécuter un dans chaque d'entre eux:
Dans chaque fenêtre d'Invite de Commande, accédez au répertoire correct (comme C:/Python27) puis tapez " python YourCodeNo1.py "dans une fenêtre d'Invite de Commande" python YourCodeNo2.py' dans le prochain ect. .
Je suis actuellement en cours d'exécution 3 codes à la fois de cette façon, sans ralentir tout d'eux.