En python, la parallélisation peut être facilement réalisée en utilisant le multiprocessing.Pool de multiprocessing qui est une bibliothèque de parallélisation, mais il ne peut pas être utilisé pour la parallélisation comme la méthode de classe. Dans ce cas, il n'y a pas d'autre choix que de paralléliser à l'aide du multiprocessing.Process, mais si vous exécutez des processus pour chaque nombre de processeurs, lorsque vous exécutez plus de processus que le nombre de processeurs, le processeur du processus qui s'est terminé plus tôt sera libéré et il sera gaspillé. Va finir. Je me suis demandé si je pouvais exécuter un nouveau processus à partir d'un processeur qui se terminait comme SGE, alors j'ai créé de force un script pour cela. Il y a peut-être un meilleur moyen.
Un exemple de script de gestion de processus parallèle lors de la parallélisation de la méthode de classe.
import multiprocessing as mp
ps = []
for i in range(1000):
ps.append(mp.Process(target=hoge,args=(i,))) #Générer 1000 fonctions ou méthodes cibles
finishedList = []
presentindex = 0
for p in ps[0:mp.cpu_count()]:
p.start()
presentindex += 1
while 1:
time.sleep(1)#Surveillez chaque seconde.
for i, p in enumerate(ps[:presentindex]):
if p.is_alive() or i in finishedList:#Jugement de fin de procédure p
pass
else:
finishedList.append(i)#Enregistrer l'index du processus terminé
if presentindex < len(ps):
ps[presentindex].start()
presentindex += 1
print(i)
if len(finishedList) == len(ps):#Quitter si le nombre de processus terminés et le nombre de processus créés sont identiques
break
Recommended Posts