915
32.6
Daten im Pool bearbeiten
Sie rufen die Methode map() des Pool-Objektes auf. Das Format ist map(func, iter-
able,
[chunksize]). Dabei ist func der Name der Funktion, die die Arbeitsprozesse
ausführen sollen. Das zweite Argument
iterable ist die Daten-Kollektion, die verarbei-
tet werden soll. Die Methode zerteilt die Kollektion in Stücke, die sie den Prozessen
zuordnet. Das optionale dritte Argument gibt die ungefähre Größe dieser Stücke an
(Anzahl der Elemente der Kollektion). Die Methode
map() liefert eine Liste mit den
gesammelten Ergebnissen der parallelen Berechnungen.
32.6.1 Mit dem Pool geht’s schneller – ein Zeitexperiment
Das folgende Experiment vergleicht den Zeitbedarf von paralleler und serieller Verarbei-
tung. Wir haben eine Liste von acht Zahlen, deren Quadrate berechnet werden sollen. Die
Funktion, die das Quadrat berechnet, enthält eine
sleep()-Anweisung, die den Prozess für
eine Sekunde schlafen legt. Damit simulieren wir eine komplexere Funktion, deren Ausfüh-
rung mehr Zeit benötigt.
Skript:
Erläuterung:
#1: Der Prozess, in dem die Funktion ausgeführt wird, wartet eine Sekunde lang.
#2: Ein Pool von Arbeitsprozessen wird erzeugt. Da keine Prozesszahl explizit angegeben
wird, ist die Anzahl der Prozesse gleich der Anzahl der Prozessoren. Das ist die maximal
mögliche Parallelität auf dieser Hardware.
#3: Startzeit (Anzahl Sekunden seit Beginn der »Epoche«).
#4: Eine Folge von Zahlen von 0 bis 7.
from multiprocessing import Pool
from time import time, sleep
def square(x):
sleep(1) #1
return x**2
if __name__ == '__main__':
p = Pool() #2
start = time() #3
numbers = range(8) #4
result = p.map(square, numbers) #5
p.close() #6
p.join()
print(result, "Zeit parallel: ", time() - start) #7
start = time() #8
result = list(map(square, numbers)) #9
print(result, "Zeit seriell: ", time() - start)

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.