Maison >développement back-end >Tutoriel Python >Comment le « multitraitement » et « concurrent.futures » de Python peuvent-ils paralléliser une boucle simple pour des performances améliorées ?
Parallélisation d'une boucle Python simple : exploration des options de multitraitement
Dans le domaine du calcul haute performance, la parallélisation est une technique efficace utilisée pour accélérer l'exécution de tâches à forte intensité de calcul. Cette question explore la mise en œuvre pratique de la parallélisation d'une simple boucle Python à l'aide de deux approches multitraitements populaires : le module multitraitement et concurrent.futures.ProcessPoolExecutor.
Verrouillage global de l'interprète de CPython : une mise en garde
Avant d'aborder les méthodes spécifiques, il est important d'aborder le verrouillage global de l'interprète de l'implémentation CPython. (GIL). Le GIL interdit essentiellement l’exécution simultanée de code Python par différents threads au sein du même interpréteur. Cette limitation signifie que les threads sont principalement bénéfiques pour les tâches liées aux E/S, mais pas pour les charges de travail liées au processeur. Étant donné que le nom de la fonction calc_stuff() suggère des opérations liées au processeur, il est recommandé d'utiliser plusieurs processus.
Multitraitement avec module multitraitement
Le module multitraitement fournit un mécanisme simple pour créer des pools de processus. Le code ci-dessous démontre son utilisation :
pool = multiprocessing.Pool(4) out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
Multitraitement avec concurrent.futures.ProcessPoolExecutor
Alternativement, concurrent.futures.ProcessPoolExecutor peut également être utilisé pour réaliser la parallélisation des processus. . Cette méthode s'appuie sur le même module multitraitement, garantissant des fonctionnalités identiques :
with concurrent.futures.ProcessPoolExecutor() as pool: out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
Les deux méthodes multitraitements offrent une approche simple pour paralléliser les charges de travail liées au processeur, ce qui en fait des outils précieux pour améliorer l'efficacité du code Python.
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!