Heim >Backend-Entwicklung >Python-Tutorial >Wie kann Pythons Multithreading die Codeeffizienz mithilfe von „map' und „pool' verbessern?
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)
Dieser Multithread-Code dient als Äquivalent zur folgenden Single-Thread-Version:
results = [] for item in my_array: results.append(my_function(item))
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()
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
Ü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:
results = pool.starmap(function, zip(list_a, list_b))
results = pool.starmap(function, zip(itertools.repeat(constant), list_a))
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!