Maison >développement back-end >Tutoriel Python >Quand dois-je utiliser le « ThreadPool » non documenté de Python pour le traitement parallèle ?

Quand dois-je utiliser le « ThreadPool » non documenté de Python pour le traitement parallèle ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-12 17:45:15155parcourir

When Should I Use Python's Undocumented `ThreadPool` for Parallel Processing?

Pooling basé sur des threads dans le multitraitement

Le module multitraitement offre une puissante classe « Pool » pour paralléliser les tâches à l'aide de processus distincts. Cependant, cette approche entraîne des frais généraux en raison de la création de processus. Pour les opérations liées aux E/S avec le GIL publié lors de l'appel de fonction réel, l'utilisation de threads peut donner de meilleures performances.

Présentation de la classe ThreadPool

Contrairement à la croyance populaire, le Le module multitraitement fournit en effet une interface de pool basée sur les threads. Ce joyau caché, accessible via l'import ThreadPool de multiprocessing.pool, offre un moyen pratique de paralléliser des tâches à l'aide de threads.

Malgré son statut non documenté, la classe ThreadPool implémente l'interface du pool multitraitement à l'aide d'une classe Process factice qui enveloppe Python. fils. Cette classe Process factice réside dans le module multiprocessing.dummy, qui offre l'intégralité de l'interface multitraitement basée sur les threads.

Exemple d'utilisation

Similaire au ProcessPool, le ThreadPool peut être utilisé pour paralléliser les fonctions cartographiques :

import multiprocessing.pool

def long_running_func(p):
    c_func_no_gil(p)

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

Remarque : La classe ThreadPool n'est pas aussi efficace que ProcessPool dans tous les cas, notamment lorsque les tâches nécessitent un temps CPU important.

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