Kapitel 32
Parallele Datenverarbeitung
916
#5: Die Arbeitsprozesse führen die Funktion square() aus und bearbeiten parallel alle Ele-
mente von
numbers. Die Rechenergebnisse werden in der Liste result gespeichert.
#6: Der Pool wird geschlossen.
#7: Ausgabe von Rechenergebnis und Zeitbedarf für die parallele Rechnung.
#8: Neue Startzeit für die serielle Rechnung.
#9: Die Standardfunktion map() arbeitet im Hauptprozess und wendet die Funktion
square() nacheinander (seriell) auf alle Elemente von numbers an.
Auf einem Computer mit einem vierkernigen Prozessor liefert das Programm folgende Aus-
gabe:
Die Verarbeitung mit vier parallelen Prozessen ist deutlich schneller als die serielle Variante.
32.6.2 Forschen mit Big Data aus dem Internet
In diesem Abschnitt wird ein kleines Beispiel für die Verarbeitung von realen wissenschaft-
lichen Daten mit der Pool-Technik vorgestellt. Obwohl es um mehr als 25.000 Datensätze
geht, ist es dennoch ein »Spielzeug-Projekt«, bei dem die Vorteile der Parallelisierung noch
gar nicht richtig durchschlagen. Es illustriert aber einige Probleme der Verarbeitung von Big
Data mit der Pool-Technik.
Das Programm verwendet eine frei verfügbare CSV-Datei mit Datensätzen, die der
Dienstanbieter Crowdflower zum Training eines intelligenten »Gender Predictor« verwen-
det. Das ist ein System, das mit Methoden der künstlichen Intelligenz arbeitet und heraus-
finden kann, ob ein Text von einer weiblichen oder einer männlichen Person geschrieben
worden ist. Die Vorhersage beruht darauf, dass bestimmte Wörter eher von Frauen und
andere eher von Männern verwendet werden (Prädiktoren). Es gibt auch Antiprädiktoren,
das sind Begriffe, die von einer Gender-Gruppe vermieden werden.
Die Adresse zum Download ist:
https://www.crowdflower.com/wp-content/uploads/
2016/03/gender-classifier-DFE-791531.csv
. Weitere Informationen zu diesem Pro-
jekt finden Sie in einem Artikel von Justin Tenuto (2015):
https://www.crowdflower.com/
using-machine-learning-to-predict-gender/
.
[0, 1, 4, 9, 16, 25, 36, 49] Zeit parallel: 2.937546968460083
[0, 1, 4, 9, 16, 25, 36, 49] Zeit seriell: 8.00010085105896
Freie Datensätze im Internet
Im Internet finden Sie eine Fülle frei zugänglicher Datensätze, mit denen Sie Ihre Ideen
zur parallelen Programmierung ausprobieren können. Hier einige Startpunkte für die
Suche:
AWS Public Data Sets: https://aws.amazon.com/de/datasets
Registry of Research Data Repositories: http://www.re3data.org/
Freie Datensätze von Crowdflower:
https://www.crowdflower.com/data-for-everyone/
917
32.6
Daten im Pool bearbeiten
Die CSV-Datei ist ein Textdokument mit über 25.000 sehr langen Zeilen. Jede Zeile enthält
einen kompletten Datensatz, dessen Werte durch Kommas getrennt sind. Der folgende Text
ist ein Beispiel für eine einzige Zeile, die hier im Buchtext auf mehrere Zeilen verteilt
wurde:
Das fünfte Element jeder Zeile zeigt mit
male oder female an, ob der Tweet von einer männ-
lichen oder weiblichen Person stammt. Es gibt auch Tweets, die nicht von einer Person, son-
dern von einer Organisation stammen oder die keiner Autorenkategorie zugeordnet werden
können. Das folgende Programm löst eine ganz simple Aufgabe: Es durchsucht die CSV-
Datei und berechnet, in wie vielen Tweets von weiblichen Autoren der Begriff
car vor-
kommt.
Skript:
815719226,FALSE,finalized,3,10/26/15 23:24,male,1,yes,1,12/5/13 1:48,
i sing my own rhythm.,0,,08C2C2,sheezy0,,https://pbs.twimg.com/
profile_images/414342229096808449/fYvzqXN7_normal.png,0,FFFFFF,
Robbie E Responds To Critics After Win Against Eddie Edwards In The
#WorldTitleSeries https://t.co/NSybBmVjKZ,,110964,10/26/15
12:40,6.5873E+17,main; @Kan1shk3,Chennai;;;;;;;;;;
from multiprocessing import Pool
from time import time
WORD, GENDER = "car", ",female," #1
ANSWER = """Es wurden insgesamt %i Tweets
dieser Gender-Gruppe untersucht.
Das Wort %s wurde in %.1f Prozent aller Tweets dieser
Gender-Gruppe gefunden. Bearbeitungszeit: %f Sekunden." #2
def search(line):
gender_found, word_found = 0, 0
if GENDER in line:
gender_found += 1
if WORD in line:
word_found += 1
return gender_found, word_found #3
if __name__ == '__main__':
f = open("gender-classifier.csv",
encoding="utf-8") #4
data = f.readlines() #5
f.close()
start = time()
p = Pool()

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.