907
Kapitel 32
Parallele Datenverarbeitung
In den Computern dieser Welt befinden sich gigantische Datenmengen aus den unter-
schiedlichsten Lebensbereichen, die über das Internet frei verfügbar sind und von jeder-
mann ausgewertet werden können. Die NASA bietet jede Menge Bildmaterial von
Weltraumprojekten an, darunter einen kompletten Infrarot-Atlas unserer Galaxis (45 TB).
Twitter ermöglicht es Ihnen, den Stream von Tweets – die so genannte Firehose – »abzuhö-
ren« und Kommunikationsdaten zu sammeln. Von Wikipedia bekommen Sie Traffic-Statis-
tiken für drei Monate (150 GB).
Große Datenmengen (Big Data) zu verarbeiten, ist ein zeitaufwändiger Job. Manche Leute
sagen, Big Data fängt da an, wo man sich ernsthaft Gedanken über die Effizienz der Aus-
wertungsprogramme machen muss. Ein Ansatz, das Tempo zu steigern, ist die parallele
Programmierung, bei der zeitaufwändige Aufgaben von mehreren Prozessen gleichzeitig
bearbeitet werden. Heute haben auch einfache PCs mehrkernige Prozessoren, die man für
diese Technik nutzen kann. In diesem Kapitel erfahren Sie etwas über die Grundlagen der
parallelen Programmierung mit dem Python-Modul
multiprocessing. Wie startet und
beendet man parallele Prozesse? Wie kann man den Zugriff mehrerer Prozesse auf gemein-
same Ressourcen mit Locks koordinieren? Wie werden zwischen Prozessen Daten über
Queues und Pipes ausgetauscht? Wie lässt man einen großen Datensatz von einem Pool von
Arbeitsprozessen effizient bearbeiten?
32.1 Was sind parallele Programme?
Die Anweisungen eines Python-Programms werden meist nacheinander (seriell, sequen-
ziell) ausgeführt. Das ist der Regelfall. Es ist aber möglich, Abschnitte eines Programms so
zu definieren, dass sie gleichzeitig ausgeführt werden. Man spricht dann von nebenläufigen
oder parallelen Prozessen. Ein Prozess – im allgemeinen Sinn – ist ein Programm in Aus-
führung. Ein Programm ist nichts weiter als ein statisches Textdokument, das eine Folge
von Anweisungen enthält. Ein Prozess dagegen »lebt«. Er wird gestartet, ändert im Laufe
seines Lebens immer wieder seinen Zustand und wird irgendwann schließlich beendet.
Wenn ein Python-Skript gestartet wird, entsteht ein Prozess. Insbesondere bei interaktiven
grafischen Benutzungsoberflächen hat man – innerhalb des Hauptprozesses – mehrere
nebeneinander laufende Unterprozesse, die man Threads nennt (siehe Kapitel 20). Denn
im Mensch-Maschine-Dialog passieren in der Regel mehrere Abläufe gleichzeitig: Auf
einem Canvas wird z.B. eine Animation gezeigt und gleichzeitig reagiert das System auch
auf das Anklicken von Schaltflächen und Drücken von Tasten. Solche »asynchronen Events«
lösen die Ausführung von Funktionen (Eventhandlern) aus. Wenn die Eventhandler-Funk-
tionen nicht nebeneinander in eigenen Threads laufen würden, wäre das System nach
einem Event so lange blockiert, bis der zugehörige Eventhandler seine Arbeit beendet hat.
Neben der Realisierung von Nebenläufigkeit bei grafischen Benutzungsoberflächen gibt es
noch einen ganz anderen Grund für Parallelität. Und das ist der Wunsch nach mehr Effi-

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.