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
Linda HamiltonOriginal
2024-12-21 07:44:14347Durchsuche

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)

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:

  • Übergabe mehrerer Arrays:
results = pool.starmap(function, zip(list_a, list_b))
  • Übergabe einer Konstante und eines Arrays:
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!

Stellungnahme:
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