Utiliser le threading en Python
Dans le monde de la programmation en constante évolution, l'utilisation de plusieurs threads est devenue de plus en plus précieuse pour améliorer l'efficacité du code . Cet article vise à fournir un exemple complet montrant comment répartir efficacement les tâches sur plusieurs threads en Python.
Multithreading avec map et pool
Python moderne offre une simplicité significative lorsqu'il arrive au multithreading avec l'introduction de la carte et du pool. L'extrait de code ci-dessous, dérivé d'un article renommé sur le « Parallélisme en une seule ligne », démontre avec élégance la puissance de cette approche :
from multiprocessing.dummy import Pool as ThreadPool pool = ThreadPool(4) results = pool.map(my_function, my_array)
Ce code multithread est l'équivalent de la version monothread suivante :
results = [] for item in my_array: results.append(my_function(item))
Comprendre la carte
La carte, une fonction polyvalente en Python, simplifie le parallélisme en appliquant une fonction spécifiée à chaque élément d'une séquence. Il parcourt efficacement la séquence, exécute la fonction et regroupe les résultats dans une liste.
Multitraitement et multitraitement factice
Multitraitement et son frère moins connu, le multitraitement .dummy, propose des versions parallèles de la fonction map. Alors que le multitraitement utilise plusieurs processus, la variante factice utilise des threads, ce qui la rend idéale pour les tâches gourmandes en entrées/sorties.
Implémentation avec multiprocessing.dummy
Considérez le code suivant extrait de code, qui exploite multiprocessing.dummy pour ouvrir plusieurs URL simultanément :
import urllib2 from multiprocessing.dummy import Pool as ThreadPool urls = [ 'http://www.python.org', 'http://www.python.org/about/', 'http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html', 'http://www.python.org/doc/', 'http://www.python.org/download/', 'http://www.python.org/getit/', 'http://www.python.org/community/', 'https://wiki.python.org/moin/', ] pool = ThreadPool(4) results = pool.map(urllib2.urlopen, urls) pool.close() pool.join()
Les résultats de synchronisation illustrent des améliorations significatives des performances en utilisant plusieurs threads :
Single thread: 14.4 seconds 4 Pool: 3.1 seconds 8 Pool: 1.4 seconds 13 Pool: 1.3 seconds
Passer plusieurs arguments
Dans Python 3.3 et plus tard, passer plusieurs arguments à une fonction au sein d'un pool est possible en utilisant ce qui suit techniques :
results = pool.starmap(function, zip(list_a, list_b))
results = pool.starmap(function, zip(itertools.repeat(constant), list_a))
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!