Auparavant, je devais analyser un peu de big data, ce qui prenait beaucoup de temps à traiter. À ce moment-là, je résumerai la méthode utilisée pour accélérer le traitement.
Ce qui suit utilise le module multitraitement.
multi.py
from multiprocessing import Pool
from multiprocessing import Process
C'est comme ça.
multi.py
def function(hoge):
#Chose que tu veux faire
return x
def multi(n):
p = Pool(10) #Nombre maximum de processus:10
result = p.map(function, range(n))
return result
def main():
data = multi(20)
for i in data:
print i
main()
Dans ce cas, le processus est "exécuter la fonction 20 fois en changeant la valeur en 0,1,2 ... 19". Étant donné que la valeur de retour de la fonction est incluse dans le résultat sous forme de liste, elle est reçue et sortie en standard.
De plus, dans mon environnement, je peux utiliser jusqu'à 12 cœurs (6 cœurs et 12 threads pour être exact), donc j'ai défini le nombre maximum de processus à 10. Si vous l'utilisez au maximum, il sera difficile d'ouvrir le navigateur, vous pouvez donc l'arrêter en toute sécurité.
Le taux d'utilisation du processeur pendant le traitement parallèle est également répertorié. Vous pouvez voir que le traitement parallèle est correctement effectué avec plusieurs cœurs de cette manière.
Vous pouvez également obtenir l'identifiant de processus en charge de chaque processus.
multi.py
import os
def fuction(hoge):
#Chose que tu veux faire
print 'process id:' + str(os.getpid())
return x
#Omis ci-dessous
Il est intéressant de savoir que si vous l'affichez comme ceci, il est exécuté dans un processus différent.
Le processus, qui a duré environ 35 heures, s'est achevé en un peu plus de 4 heures. Le temps de traitement est inférieur à 1/10, ce qui est un résultat suffisant.
Bien sûr, la vitesse de chaque processus n'augmente pas, il est donc nécessaire de répartir le travail de manière uniforme afin d'améliorer l'efficacité, mais je pense que cela sera utile car il y a beaucoup de choses de ce genre dans le système d'analyse.
Recommended Posts