Maison >développement back-end >Tutoriel Python >Comment puis-je paralléliser les boucles Python pour une efficacité améliorée ?
Parallélisation des boucles Python pour une efficacité améliorée
En Python, la parallélisation des boucles peut améliorer considérablement les performances des tâches liées au processeur. Pour paralléliser la boucle fournie, qui calcule les valeurs à l'aide de la fonction calc_stuff et accumule les résultats dans des listes séparées, il existe deux approches efficaces :
Méthode 1 : Multitraitement
En raison au Global Interpreter Lock (GIL) de Python, l'utilisation de plusieurs threads ne présentera aucun avantage pour les tâches liées au processeur. Au lieu de cela, le multitraitement est une option plus appropriée.
À l'aide du module multitraitement, vous pouvez créer un pool de processus avec plusieurs processus de travail, comme indiqué ci-dessous :
pool = multiprocessing.Pool(4) # Create a pool with 4 worker processes out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
La fonction map envoie chaque élément dans l'itérateur de plage d'un processus de travail, collecte les résultats renvoyés et les décompresse dans les fichiers out1, out2 et out3 listes.
Méthode 2 : Concurrent.futures Python 3.2
Une autre option pratique pour paralléliser les boucles consiste à utiliser le module Concurrent.futures, qui fournit une interface optimisée pour l'utilisation pools de threads et de processus :
with concurrent.futures.ProcessPoolExecutor() as pool: out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
Cette approche utilise un pool de processus sous le capot, se comportant de la même manière que le méthode multitraitement.
Les deux méthodes permettent une exécution parallèle de la fonction calc_stuff sur différentes entrées, ce qui entraîne des temps d'exécution plus rapides pour les boucles gourmandes en CPU.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!