[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python

introduction

J'ai plusieurs codes écrits en Python et je souhaite laisser un programme en contrôler le démarrage. Il y a des moments comme ça. Cette fois, je vais vous présenter comment exécuter un autre programme que vous souhaitez démarrer de manière asynchrone parmi les programmes.

environnement

Windows10 python 3.7.6 anaconda 20.02

Le code principal de cette fois

import subprocess

command = [python (Fichier).py (argument)]
proc = subprocess.Popen(command)  #->La commande est exécutée(N'attendez pas la fin du traitement)
result = proc.communicate()  #->Attends la fin

Exemple de code

C'est un code sans aucune torsion, mais j'ai créé deux fichiers pour voir si cela fonctionne pour le moment. call.py est conçu pour afficher l'argument donné. Listez les commandes en les mettant entre "" séparées par des espaces.

call.py


import sys
from time import sleep

sleep(1)  #Endormez-vous une seconde(Pour vérifier s'il est asynchrone)
args = sys.argv[1]
print(args)

main.py


import subprocess

command = ["python","call.py,"J'ai été appelé!"]
proc = subprocess.Popen(command)
print("Appel")
proc.communicate()

** Résultat d'exécution ** 0807_subprocesspopen.png

Puisque «l'appel» de main est imprimé en premier, Vous pouvez voir que ** n'attend pas le processus exécuté par subprocess.Popen () **.

À propos du temps de traitement

Quand je l'appelle avec subprocess.Popen (), je suis préoccupé par le ** temps de traitement **. Appelons call_2.py, qui effectue le traitement suivant pour une image 1280 x 800.

call_2.py


from time import time
import numpy as np
import cv2

start =  time()

img = cv2.imread("sample.png ")
resize = cv2.resize(img,dsize=None,fx=0.5,fy=0.5)  #resize

kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(resize,kernel)  #erode

cv2.imwrite("resize.png ",erosion)

end = time() - start
print(end)

Maintenant, lorsque vous l'exécutez avec python main.py et lorsque vous l'exécutez avec python call_2.py J'ai comparé le temps de la fin à imprimer. J'ai essayé plusieurs fois d'entrer et de sortir de la console, ** Le temps de traitement était à peu près le même, qu'il soit dans le cache ou non **. (Le nombre réel est omis car il dépend de l'environnement d'exécution)

en conclusion

Je vous ai montré comment exécuter un autre fichier py avec subprocess.Popen (). Il n'y avait aucune différence de vitesse de traitement dans l'environnement Windows. Je suis heureux qu'il n'y ait pas de goulot d'étranglement de vitesse. Cependant, cela peut changer si l'environnement est Linux.

Nous espérons que vous trouverez cela utile.

Matériel de référence

** Veuillez également vous référer au site suivant ** Documentation officielle (Python 3.8.5) Si le fichier que vous souhaitez exécuter existe dans un autre répertoire Exécutez la commande shell depuis Python! Résumé de l'exécution d'un sous-processus avec sous-processus Exécuter la commande Linux à partir de Python avec un sous-processus

** Un livre qui semble utile (je veux juste le lire ...) ** Expert Python Programming Revised 2nd Edition

Recommended Posts

[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python
[Python] Lorsque vous souhaitez utiliser toutes les variables dans un autre fichier
[Python3] Code qui peut être utilisé lorsque vous souhaitez redimensionner des images dossier par dossier
Je veux écrire en Python! (1) Vérification du format de code
python Spécifie la fonction à exécuter lorsque le programme se termine
Lorsque vous voulez plt.save dans l'instruction for
Comment exécuter une commande à l'aide d'un sous-processus en Python
Je veux faire quelque chose avec Python à la fin
[Python3] Code qui peut être utilisé lorsque vous souhaitez découper une image dans une taille spécifique
[Django] Mémorandum lorsque vous souhaitez communiquer de manière asynchrone [Python3]
Je veux pouvoir exécuter Python avec VS Code
Lorsque vous souhaitez lancer une commande UNIX sur Python
Lors de l'écriture d'un programme en Python
[Petite histoire] Une mesure minutieuse lorsque vous devez exécuter une fonction avant l'importation en Python
[Python] Lorsque vous souhaitez importer et utiliser votre propre package dans le répertoire supérieur
Voulez-vous attendre un usage général avec Python Selenium?
Ligne de mode lorsque vous ouvrez le code Python approprié dans Vim
Si vous souhaitez affecter une exportation csv à une variable en python
Lorsque vous exécutez diff en python et que vous voulez à la fois le code de retour et la sortie
Articles à lire lorsque le code de script Python de Blender ne fonctionne pas dans 2.80
Lorsque vous souhaitez remplacer plusieurs caractères dans une chaîne de caractères sans utiliser d'expressions régulières dans la série python3
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Si vous souhaitez compter les mots en Python, il est pratique d'utiliser Counter.
Je veux faire le test de Dunnett en Python
Je veux créer une fenêtre avec Python
Lorsque vous souhaitez mettre à jour le pilote Chrome.
Notes personnelles sur le code doc Python dans Sphinx
Je veux fusionner des dictionnaires imbriqués en Python
Je veux créer du code C ++ à partir de code Python!
Erreur lors de la tentative d'installation de psycopg2 en Python
Je veux afficher la progression en Python!
Convertir le code de maillage cubique en WKT en Python
Comment créer un environnement lorsque vous souhaitez utiliser python2.7 après l'installation d'Anaconda3
Je suis tombé sur un code de caractère lors de la conversion de CSV en JSON avec Python
Utilisez PIL en Python pour extraire uniquement les données souhaitées d'Exif
[Python] Choses à vérifier lorsqu'une erreur de décodage Unicode apparaît dans Django
Le programme Python est lent! Je veux accélérer! Dans ce cas ...
[Python3] Code qui peut être utilisé lorsque vous souhaitez modifier l'extension d'une image à la fois
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Points à garder à l'esprit lors du développement d'un robot d'exploration en Python
Réécrire le code Python2 en Python3 (2to3)
Je veux écrire en Python! (2) Écrivons un test
Paramètres lorsque vous souhaitez exécuter python-mecab avec travis
Même avec JavaScript, je veux voir Python `range ()`!
Un mémorandum lors de l'écriture de code expérimental ~ Se connecter en python
Points à garder à l'esprit lors de la copie de listes Python
Je veux échantillonner au hasard un fichier avec Python
Que faire si vous obtenez une erreur lors de l'importation de matplotlib en Python (Mac)
Lorsque vous souhaitez filtrer avec le framework Django REST
Je veux travailler avec un robot en python.
Choses à noter lors de l'initialisation d'une liste en Python
Je veux remplacer les variables dans le fichier de modèle python et le produire en masse dans un autre fichier
Je veux écrire en Python! (3) Utiliser des simulacres
Utilisez communiquer () lors de la réception de la sortie dans un sous-processus Python