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.
Windows10 python 3.7.6 anaconda 20.02
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
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 **
Puisque «l'appel» de main est imprimé en premier, Vous pouvez voir que ** n'attend pas le processus exécuté par subprocess.Popen () **.
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)
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.
** 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