Kapitel 32
Parallele Datenverarbeitung
908
zienz. Auch einfache Computer (z.B. auch der Raspberry Pi) haben heute mehrkernige Pro-
zessoren, die parallel Daten verarbeiten können. Wenn mehrere Prozessoren gleichzeitig an
einem Problem arbeiten, ist die Aufgabe schneller gelöst, als wenn ein einzelner die ganze
Arbeit tun muss. Um diese Art paralleler Datenverarbeitung geht es in diesem Kapitel.
Wenn man mit parallelen Prozessen die Verarbeitungsgeschwindigkeit verbessern will, nut-
zen die Threads aus dem Modul
_threads gar nichts. Die Threads eines Prozesses teilen
sich einen gemeinsamen Speicherbereich und werden nur scheinbar gleichzeitig ausge-
führt. Tatsächlich sorgt ein Mechanismus namens Global Interpreter Lock (GIL) dafür, dass
zu jedem Zeitpunkt immer nur ein Thread ausgeführt wird. Multithreading führt niemals
zu einer schnelleren, sondern im Gegenteil sogar zu einer langsameren Ausführung eines
Python-Programms, da ja die Verwaltung der Threads zusätzliche Zeit kostet.
Mit dem Modul
multiprocessing können Sie »vollwertige« unabhängige Prozesse erzeu-
gen, die auf separaten Prozessoren eines Computers, ja sogar auf unterschiedlichen Maschi-
nen in einem Netzwerk laufen können.
Falls Sie nicht wissen, wie viele Prozessoren auf Ihrem Rechner verfügbar sind, können Sie
es in der Python-Shell erfragen:
In den folgenden Abschnitten lernen Sie Techniken kennen, schnelle parallele Programme
zur Verarbeitung großer Datenmengen zu entwickeln.
32.2 Prozesse starten und abbrechen
Immer, wenn ein Python-Skript gestartet wird, entsteht ein Prozess, der vom Betriebssys-
tem eine Prozess-Identifikationsnummer (PID) bekommt. Mithilfe dieser Nummer kann
der Prozess von außen gestoppt werden (bevor er von alleine terminiert).
Das folgende Python-Skript gibt die Prozess-ID aus und wartet dann eine Minute.
Speichern Sie das Programm z.B. unter dem Namen
process_id.py. Starten Sie das Pro-
gramm in einem Konsolenfenster (bei Windows Eingabeaufforderung).
Die Ausgabe in der Folgezeile ist die PID, eine natürliche Zahl wie z.B.
7460. Mithilfe der
PID können Sie in einem zweiten Konsolenfenster den Prozess abbrechen. Unter Unix:
>>> import os
>>> os.cpu_count()
4
import os, time
print(os.getpid())
time.sleep(60)
> python process_id.py
7460
$ sudo kill 7460

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.