Maison >développement back-end >Tutoriel Python >Existe-t-il un équivalent basé sur les threads au pool multitraitement de Python ?

Existe-t-il un équivalent basé sur les threads au pool multitraitement de Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 07:21:09888parcourir

Is There a Thread-Based Equivalent to Python's Multiprocessing Pool?

Un pool basé sur des threads : une alternative au pool multitraitement

Le multitraitement en Python fournit un mécanisme puissant pour le traitement parallèle utilisant plusieurs processus. La classe multiprocessing.Pool offre une interface pratique pour gérer les processus de travail et distribuer les tâches. Cependant, lorsque des processus lourds ne sont pas souhaitables, existe-t-il une solution similaire qui utilise des threads à la place ?

Oui, il existe un joyau caché dans le module multitraitement qui offre un parallélisme basé sur les threads : la classe ThreadPool. Pour y accéder, importez-le en utilisant :

from multiprocessing.pool import ThreadPool

La classe ThreadPool encapsule une classe Process factice qui exécute en interne un thread Python. Cette approche permet une API multitraitement basée sur les threads, similaire à la classe Pool standard. Mais contrairement aux processus de travail, les threads partagent la mémoire, ce qui réduit potentiellement les frais généraux.

L'utilisation de ce ThreadPool basé sur les threads reflète celle du pool standard. Par exemple, pour paralléliser une opération de carte à l'aide de threads :

def long_running_func(p):
    c_func_no_gil(p)

pool = ThreadPool(4)
xs = pool.map(long_running_func, range(100))

Notez que dans ce scénario, le GIL n'est pas un problème car la fonction sous-jacente le libère avant d'effectuer des opérations liées aux E/S. Ainsi, pour les tâches gourmandes en E/S, le ThreadPool peut fournir une amélioration significative des performances tout en évitant les frais généraux liés à la création et à la gestion des processus.

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