Maison >développement back-end >Tutoriel Python >Quand dois-je utiliser ThreadPool de Python au lieu de multiprocessing.Pool ?
Pools de threads en Python : une alternative au pool multitraitement
La classe Pool du module multitraitement fournit un moyen pratique de paralléliser le code à l'aide de processus de travail . Cependant, pour certains cas d’utilisation, il peut être souhaitable d’exploiter les threads plutôt que les processus. Cet article explore une interface Pool alternative basée sur les threads disponible dans le module multitraitement.
Énoncé du problème :
Un utilisateur recherche une bibliothèque Python qui propose une classe « Pool » pour le threading des processus de travail, similaire à la classe Pool du module multitraitement. Cela permettrait une parallélisation facile des tâches similaires à l'exemple suivant en utilisant le pool multitraitement :
def long_running_func(p): c_func_no_gil(p) p = multiprocessing.Pool(4) xs = p.map(long_running_func, range(100))
Cependant, l'utilisateur souhaite éviter la surcharge associée à la création de nouveaux processus.
Solution :
Le module multitraitement comprend une interface Pool basée sur des threads qui mérite d'être explorée. Cette interface peu connue peut être importée à l'aide de la classe ThreadPool du module multiprocessing.pool :
from multiprocessing.pool import ThreadPool
En coulisses, cette classe ThreadPool utilise une classe Process factice qui encapsule un thread Python. Cette classe Process factice est implémentée dans le module multiprocessing.dummy, qui offre une interface multitraitement complète basée sur les threads.
Exemple d'utilisation :
Pour utiliser le ThreadPool, instanciez un objet ThreadPool avec le nombre souhaité de threads de travail. Ensuite, invoquez la méthode map pour paralléliser une fonction sur les threads de travail.
# Create a ThreadPool with 4 worker threads pool = ThreadPool(4) # Parallelize the `long_running_func` on 100 inputs results = pool.map(long_running_func, range(100))
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!