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 ?

Comment le « multitraitement » et « concurrent.futures » de Python peuvent-ils paralléliser une boucle simple pour des performances améliorées ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-01 02:45:13427parcourir

How Can Python's `multiprocessing` and `concurrent.futures` Parallelize a Simple Loop for Improved Performance?

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!

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