In Python kann die Parallelisierung leicht mithilfe von Multiprocessing realisiert werden. Der Multiprocessing-Pool ist eine Parallelisierungsbibliothek, kann jedoch nicht für Parallelisierungen wie die Klassenmethode verwendet werden. In diesem Fall bleibt keine andere Wahl, als mit Multiprocessing.Process zu parallelisieren. Wenn Sie jedoch Prozesse für jede Anzahl von CPUs ausführen und mehr Prozesse als die Anzahl der CPUs ausführen, wird die CPU des zuvor beendeten Prozesses freigegeben und verschwendet. Wird enden. Ich fragte mich, ob ich einen neuen Prozess von einer CPU ausführen könnte, die wie SGE endete, also erstellte ich zwangsweise ein Skript dafür. Vielleicht gibt es einen besseren Weg.
Ein Beispiel für ein paralleles Prozessverwaltungsskript beim Parallelisieren der Klassenmethode.
import multiprocessing as mp
ps = []
for i in range(1000):
ps.append(mp.Process(target=hoge,args=(i,))) #Generieren Sie 1000 Zielfunktionen oder -methoden
finishedList = []
presentindex = 0
for p in ps[0:mp.cpu_count()]:
p.start()
presentindex += 1
while 1:
time.sleep(1)#Überwachen Sie jede Sekunde.
for i, p in enumerate(ps[:presentindex]):
if p.is_alive() or i in finishedList:#Beurteilung der Beendigung des Verfahrens p
pass
else:
finishedList.append(i)#Index des abgebrochenen Prozesses speichern
if presentindex < len(ps):
ps[presentindex].start()
presentindex += 1
print(i)
if len(finishedList) == len(ps):#Beenden Sie, wenn die Anzahl der abgebrochenen Prozesse und die Anzahl der erstellten Prozesse gleich sind
break
Recommended Posts