Python-Optimierung: Parallele Datenverarbeitung

Jede ernstzunehmende Real-World Python-Anwendung ist entweder CPU-Bound oder IO-Bound oder beides. Daher bietet es sich an, die unterschiedlichen Möglichkeiten von Python für die parallele Ausführung von Code zu nutzen; Der Gewinn kann mehrere Größenordnungen an Rechenzeit-Gewinn sein. 

Für Batch-Jobs ist das in der Regel einfach. Man hat 10000 Files in einem Verzeichnis und muss die durchnudeln. Also parallelisiere ich die Verarbeitungs-Routine und los geht es.  

Was aber wenn das Programm bei File 7668 und 13 Tagen Rechenzeit einen Fehler auswirft und abstürzt? Will ich die 7667 ordentlich berechneten Files nochmal berechnen lassen? Bei linearer Verarbeitung ist es einfach den File 7667 zu finden und dort neu zu starten. Bei paralleler Verarbeitung werden die Files aber nicht nacheinander berechnet und es ist schwierig die 7667 berechneten Files zu identifizieren. Man könnte sich die Ergebnis-Files anschauen, und aus diesen auf die Eingabe-Files schließen. Aber spätestens wenn man dann zur realistischen Echtzeit-Verarbeitung übergeht wird dies nicht mehr tragbar.  

Daher wird der erfahrene Programmierer zentral und einfach durchsuchbar erfassen wollen, welche Files schon erfolgreich bearbeitet wurden. Mit dieser Information kann der Prozess erneut gestartet werden und die schon bearbeiteten Files überspringen.  

Wie aber erfasst er den Zustand der Verarbeitung?  

  • Er wird mit einem File beginnen und scheitern,  
  • dann etwas wie SQlite oder MySQL versuchen und scheitern,  
  • und schließlich selbst mit PostgreSQL oder Oracle seine Probleme haben.  
Einfach ist das Parallelisieren, das Problem ist die Synchronisation der parallelen Prozesse. Diese Wahrheit macht parallele Ausführung so schmerzhaft: Man hat den Code auf allen CPUs am laufen, aber am Ende klappt es doch nicht.  

Daher werden wir in diesem Workshop genau dieses Problem : Parallele Verarbeitung mit zentraler Datenbehandlung angehen.  

Wir werden es nicht allgemein lösen können, denn jedes Projekt hat seine individuellen Rahmenbedingungen, welche die bekannten Standard-Lösungen ins Leere laufen lassen. 

Daher werden wir Ihre konkreten Projekte mit einbeziehen, um vorausschauend Hilfestellung geben zu können. 
Kursinhalt: 

  • Multiprocessing 
  • Threading 
  • Asyncio
  • und alles zusammen mit einer zentralen DB

Termine