Kapitel 32
Parallele Datenverarbeitung
924
Erläuterung:
#1: Die Funktion wird später in einem eigenen Prozess ausgeführt. Der Parameter q ist ein
Queue-Objekt, das für den Datenaustausch verwendet wird, und
beginnings ist eine Liste
von Strings (Satzanfänge).
#2: Der Prozess wählt aus der Liste von Satzanfängen nach dem Zufallsprinzip einen Text
aus. Dieser wird an die Warteschlange
q angehängt. Somit ist dieser Prozess ein Produzent.
#3: Die Funktion wird später in einem eigenen Prozess ausgeführt. Der Parameter q ist ein
Queue-Objekt, und
endings ist eine Liste von Strings (Satzenden).
#4: Der Prozess versucht, vom Ende der Queue ein Objekt (String mit Satzanfang) zu neh-
men. Falls die Queue gerade leer ist, wartet der Prozess. Falls nach dem Timeout von zwei
Sekunden die Queue immer noch leer ist, gibt es einen
queue.Empty-Fehler. Dann wird die
Ausführung der
try-Klausel abgebrochen und die except-Klausel ausgeführt.
#5: Der Prozess wählt ein zufälliges Satzende und gibt einen Spruch aus, der aus Satzanfang
und Satzende zusammengesetzt ist.
#6: Die Ausführung der while-Anweisung wird abgebrochen und der Prozess terminiert.
#7: Ein Queue-Objekt für maximal drei Objekte wird erzeugt.
#8: Hier wird eine Liste von zwei Produzenten-Prozessen erzeugt. Jeder Prozess erhält die
Liste von Satzanfängen als Argument.
#9: Hier wird eine Liste von zwei Konsumenten-Prozessen erzeugt. Jeder Prozess erhält
eine Liste von Satzenden.
#10: Alle Prozesse werden gestartet.
#11: Alle Prozesse werden beendet.
32.9 Aufgaben
Aufgabe 1
Entwickeln Sie ein Programm, das mit parallelen Prozessen und einer Queue die folgende
Aufgabe effizient löst:
Der Benutzer wird nach einem Wort w gefragt.
In einem sehr langen Text (z.B. sämtliche Werke von Mark Twain mit 5568 Seiten, ver-
fügbar im Projekt Gutenberg
http://www.gutenberg.org) ermitteln parallele Pro-
zesse, wie häufig das Wort
w vorkommt.
Auf dem Bildschirm wird in einer gut lesbaren Antwort die Gesamtzahl der Vorkommen
ausgegeben.
for i in range(2)] #9
for p in producers + consumers: p.start() #10
for p in producers + consumers: p.join() #11

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.