Maison >développement back-end >Tutoriel Python >Quand dois-je utiliser ThreadPool de Python au lieu de multiprocessing.Pool ?

Quand dois-je utiliser ThreadPool de Python au lieu de multiprocessing.Pool ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-26 09:35:09398parcourir

When Should I Use Python's ThreadPool Instead of 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!

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