Maison >développement back-end >Tutoriel Python >Comment puis-je paralléliser les boucles Python pour une efficacité améliorée ?

Comment puis-je paralléliser les boucles Python pour une efficacité améliorée ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 02:02:09903parcourir

How Can I Parallelize Python Loops for Improved Efficiency?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn