Comment faire un traitement parallèle multicœur avec python

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.

importer

multi.py


from multiprocessing import Pool
from multiprocessing import Process

Comment utiliser

De base

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é.

l'utilisation du processeur

Le taux d'utilisation du processeur pendant le traitement parallèle est également répertorié. Screenshot .png Vous pouvez voir que le traitement parallèle est correctement effectué avec plusieurs cœurs de cette manière.

Obtenir l'identifiant du processus

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.

À quelle vitesse était-ce

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

Comment faire un traitement parallèle multicœur avec python
Comment faire un test de sac avec python
Comment faire un calcul de hachage avec Salt en Python
Introduction au traitement parallèle distribué Python par Ray
Python: comment utiliser async avec
[Python] Traitement parallèle facile avec Joblib
Pour faire une récursion avec Python2
Comment démarrer avec Python
Que faire avec la sortie de PYTHON?
Comment calculer la date avec python
Comment effectuer un traitement arithmétique avec le modèle Django
Comment faire R chartr () en Python
Laissez Heroku faire le traitement en arrière-plan avec Python
Comment utiliser BigQuery en Python
Comment afficher le japonais python avec lolipop
Comment entrer le japonais avec les malédictions Python
Comment installer python3 avec docker centos
Comment télécharger avec Heroku, Flask, Python, Git (4)
Comment lire un fichier CSV avec Python 2/3
Comment profiter de la programmation avec Minecraft (Ruby, Python)
[REAPER] Comment jouer à Reascript avec Python
Comment installer Python
Stratégie sur la façon de monétiser avec Python Java
Comment implémenter le traitement du temps d'attente avec wxpython
[Python] Comment dessiner plusieurs graphiques avec Matplotlib
[Python] Comment lire des fichiers Excel avec des pandas
Comment recadrer une image avec Python + OpenCV
Comment installer python
Comment spécifier des attributs avec Mock of Python
Comment mesurer le temps d'exécution avec Python Partie 1
Faites Houdini avec Python3! !! !!
Traitement d'image avec Python
Comment utiliser tkinter avec python dans pyenv
Traitement parallèle avec multitraitement
Traitement parallèle sans signification profonde en Python
[Python] Comment gérer les caractères japonais avec openCV
[Python] Comment comparer la date / heure avec le fuseau horaire ajouté
Comment mesurer le temps d'exécution avec Python, partie 2
3. Traitement du langage naturel avec Python 1-2. Comment créer un corpus: Aozora Bunko
Comment prendre plusieurs arguments lors d'un traitement parallèle à l'aide du multitraitement en python
Traitement du signal acoustique haute résolution (1) - Comment lire un fichier wav 24 bits avec Python
Comment convertir / restaurer une chaîne avec [] en python
[Introduction à Python] Comment utiliser l'instruction while (traitement répétitif)
Comment ajouter de l'aide à HDA (avec bonus de script Python)
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Comment récupérer des données d'image de Flickr avec Python
Comment mesurer le temps de traitement avec Python ou Java
[Introduction à Python] Comment itérer avec la fonction range?
Expliquez en détail comment créer un son avec python
Comment télécharger avec Heroku, Flask, Python, Git (Partie 3)
Comment faire du zéro-padding sur une ligne avec OpenCV
Comment exécuter des tests avec Python unittest
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Comment mesurer le temps de lecture d'un fichier mp3 avec python
Comment utiliser le mode interactif python avec git bash
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage