Heim > Backend-Entwicklung > Python-Tutorial > Wie kann Pythons Multithreading die Codeeffizienz mithilfe von „map' und „pool' verbessern?

Wie kann Pythons Multithreading die Codeeffizienz mithilfe von „map' und „pool' verbessern?

Linda Hamilton
Freigeben: 2024-12-21 07:44:14
Original
386 Leute haben es durchsucht

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

Verwendung von Threading in Python

In der sich ständig weiterentwickelnden Welt der Programmierung ist die Nutzung mehrerer Threads für die Verbesserung der Codeeffizienz immer wertvoller geworden . Dieser Artikel soll ein umfassendes Beispiel liefern, das zeigt, wie man Aufgaben in Python effektiv auf mehrere Threads verteilt.

Multithreading mit Map und Pool

Modernes Python bietet erhebliche Einfachheit, wenn es funktioniert kommt mit der Einführung von Map und Pool zum Multithreading. Der folgende Codeausschnitt, abgeleitet aus einem renommierten Artikel über „Parallelität in einer Zeile“, demonstriert elegant die Leistungsfähigkeit dieses Ansatzes:

from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4)
results = pool.map(my_function, my_array)
Nach dem Login kopieren

Dieser Multithread-Code dient als Äquivalent zur folgenden Single-Thread-Version:

results = []
for item in my_array:
    results.append(my_function(item))
Nach dem Login kopieren

Karte verstehen

Karte, eine vielseitige Funktion Vereinfacht in Python die Parallelität, indem auf jedes Element in einer Sequenz eine bestimmte Funktion angewendet wird. Es iteriert effizient über die Sequenz, führt die Funktion aus und fasst die Ergebnisse in einer Liste zusammen.

Multiprocessing und Dummy-Multiprocessing

Multiprocessing und sein weniger bekanntes Geschwistermodell, das Multiprocessing .dummy, bietet parallele Versionen der Kartenfunktion an. Während Multiprocessing mehrere Prozesse nutzt, verwendet die Dummy-Variante Threads, was sie ideal für ein-/ausgabeintensive Aufgaben macht.

Implementierung mit multiprocessing.dummy

Beachten Sie den folgenden Code Snippet, das multiprocessing.dummy nutzt, um mehrere URLs zu öffnen gleichzeitig:

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()
Nach dem Login kopieren

Die Timing-Ergebnisse veranschaulichen erhebliche Leistungsverbesserungen bei Verwendung mehrerer Threads:

Single thread:   14.4 seconds
       4 Pool:   3.1 seconds
       8 Pool:   1.4 seconds
      13 Pool:   1.3 seconds
Nach dem Login kopieren

Übergabe mehrerer Argumente

In Python 3.3 und später ist die Übergabe mehrerer Argumente an eine Funktion innerhalb eines Pools wie folgt möglich Techniken:

  • Übergabe mehrerer Arrays:
results = pool.starmap(function, zip(list_a, list_b))
Nach dem Login kopieren
  • Übergabe einer Konstante und eines Arrays:
results = pool.starmap(function, zip(itertools.repeat(constant), list_a))
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann Pythons Multithreading die Codeeffizienz mithilfe von „map' und „pool' verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage