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
Libérer: 2024-12-26 09:35:09
original
440 Les gens l'ont consulté

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))
Copier après la connexion

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
Copier après la connexion

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))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal