Maison > développement back-end > Tutoriel Python > Comment le multithreading de Python peut-il améliorer l'efficacité du code à l'aide de « map » et « pool » ?

Comment le multithreading de Python peut-il améliorer l'efficacité du code à l'aide de « map » et « pool » ?

Linda Hamilton
Libérer: 2024-12-21 07:44:14
original
341 Les gens l'ont consulté

How Can Python's Multithreading Enhance Code Efficiency Using `map` and `pool`?

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

Ce code multithread est l'équivalent de la version monothread suivante :

results = []
for item in my_array:
    results.append(my_function(item))
Copier après la connexion

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

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

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 :

  • Passer plusieurs tableaux :
results = pool.starmap(function, zip(list_a, list_b))
Copier après la connexion
  • Passer une constante et un tableau :
results = pool.starmap(function, zip(itertools.repeat(constant), list_a))
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