ich hänge mal wieder an einer Sache und komme nicht so recht weiter.
Ich habe hier beispielhaft einen Code, welcher ein Programm drei mal parallel öffnet, dich die PID dieser Programme speichert und auch die Zeit, die das Programm benötigt, bis es wieder geschlossen wird.
Das Beispiel ist stark abstrahiert.
Zum testen müsste dieser Code dann bei Euch noch leicht angepasst werden.
Folgendes habe ich vor:
Ich möchte zunächst erstmal eins der drei Programme öffnen und die Zeit bis zum Schließen messen.
Danach möchte ich diese Zeit sichern und als Referenz für alle folgenden (parallelen) Prozesse der gleichen Art (+ etwas Toleranz) nutzen.
Benötigt eines der Programme viel mehr Zeit bis zum schließen, soll dieses dann geschlossen werden und erneut gestartet werden.
Ich übergebe dabei jedem der Programme einen Satz von Inputparametern. Diese könnte ich ja duch die gespeicherte PID wieder zurückverfolgen.
Habe Ihr eine Idee dazu oder wisst wie es evtl sogar besser geht?
Vielen Dank im Voraus.
Patrick
Code: Alles auswählen
from multiprocessing import Pool,Manager
import psutil
import subprocess
import time
import os
class Test():
def __init__(self, max_cpu):
self.max_cpu = max_cpu
manager = Manager()
self.shared_list = manager.list()
self.execute_processes()
def worker(self, liste, process):
start = time.time()
process2 = subprocess.Popen(process)
current_process = psutil.Process(pid=process2.pid)
if current_process.name() == "ansysedt.exe":
pid=process2.pid
process2.communicate()
end = time.time()
liste.append([pid,end-start])
def execute_processes(self):
cmd_1 = r'C:\Program Files\AnsysEM\AnsysEM19.5\Win64\ansysedt.exe'
cmd_2 = r'C:\Program Files\AnsysEM\AnsysEM19.5\Win64\ansysedt.exe'
cmd_3 = r'C:\Program Files\AnsysEM\AnsysEM19.5\Win64\ansysedt.exe'
processes = [cmd_1,cmd_2,cmd_3]
pool = Pool(self.max_cpu)
for process in processes:
result = pool.apply_async(self.worker, args=(self.shared_list,process,))
pool.close()
pool.join()
print("Shared_list:" + str(self.shared_list))
print("Ende")
os.system("pause")
def main():
print("Beginn der Optimierung")
test=Test(2)
print("Ende der Optimierung")
if __name__ == '__main__':
main()