Multithreading und Multiprocessing auf transparente und Pythonic Weise angehen
[EuroPython 2018 - Vortrag - 2018-07-27 - PyCharm [PyData]]
[Edinburgh, UK]
Von David Liu
Mit der Zunahme der Rechenleistung wird es immer schwieriger, den eigenen Code aus dem Bereich der Einzelfadenverarbeitung zu befreien, während gleichzeitig der Wunsch besteht, in der Python-Ebene zu bleiben. Mit den kürzlich veröffentlichten Tools und Frameworks ist es viel einfacher geworden, das GIL sauber zu umgehen, sodass der eigene Python-Code Multi-Core- und Many-Core-Architekturen auf die möglichste Pythonic Weise effektiv nutzen kann. In diesem Vortrag erfahren Sie, wie Sie statisches Multiprocessing für die Prozessbindung nutzen und Thread-Pools effektiv mit einem monkey-patched Import von Threading-Modulen ausbalancieren können.
Überblick:
Einführung in Multithreading und Multiprocessing in Python
Geschichte von Multithreading und Multiprocessing in Python, klassische Frameworks
Probleme, die auftreten können (Übersubscription, Probleme mit geschachteltem Parallelismus, Prozesswechsel, Poolressourcen auf gemeinsam genutzten Maschinen)
Python-Zugriff auf größere Hardware in den letzten Jahren (28+ Kerne usw.)
Wann man im GIL bleiben sollte und wann man es umgehen sollte
Die Vorteile und die Sicherheit des GIL
Python-seitiges Verlassen des GIL; Analyse, wann man zu Einzelfadenverarbeitung zurückkehren sollte und wann Multithreading eine trügerisch schlechte Idee ist
Verantwortlichkeit von Frameworks, die nativ das GIL verlassen
Die neuen Multithreading- und Multiprocessing-Bibliotheken und -Techniken
statisches Multiprocessing-Modul (smp) (und Monkey-Patching von Multiprocessing)
Thread-Pool-Kontrolle mit Befehlszeilenaufrufen von Python (python -m tbb -p 8)
Alles zusammenbringen
Beispiele für die Verwendung von statischem Multiprocessing auf einer großen Maschine, um Übersubscription zu stoppen
Beispiel eines Pseudo-Daemon-Prozesses auf einer 4-Kern-Maschine durch Prozessbindung
Thread-Pool-Kontrolle an einem einfachen NumPy-Beispiel
Zusammenfassung - Best Practices für die Verwendung der oben genannten Methoden zur Kontrolle von Multithreading und Multiprocessing
Was im Bereich getan werden muss (Frameworks und Dinge, die offengelegt werden müssen)
Probleme, die in diesem Bereich weiterhin bestehen
Fragen & Antworten