PyCologne Treffen Februar 2017
Datum: 08.02.2017, 19:00 Uhr
Ruben Gonzalez erklärte, was der Global Interpreter Lock (GIL) ist und warum Python ihn noch nicht los ist, Christian Geier zeigte mit multiprocessing einen Ausweg und stellte in einem Lightning Talk sein Tool zum Verfolgen von GitHub-Stars vor. Zum Abschluss präsentierte Stephan Porz sein Package Trueskill.
Anwesend: 19 Personen
Organisatorisches
- Kurze Vorstellungsrunde
- Bitte mithelfen, das Etherpad zu führen
Ankündigungen
- GoTo für Python, Version 1.0 kam gerade heraus: https://github.com/snoack/python-goto
Vorträge
Was ist GIL und warum sind wir's noch nicht losgeworden? - Ruben Gonzalez
Slides: http://wass-ctf.xyz/~rg/dl/GIL_PyCologne.pdf Beispiele: http://wass-ctf.xyz/~rg/dl/GIL.tgz
Was ist der Global Interpreter Lock (GIL)? Verschiedene Programmteile auf einem Rechner werden oft parallel ausgeführt (Threads), "Nebenläufigkeit". Probleme gibt es, wenn beide Threads die gleiche Variable lesen und schreiben wollen. Ein Lock löst dieses Problem, erzeugt dabei aber Wartezeiten für andere Threads. Bei Python ist dieser Lock global (GIL) und nicht auf eine Variable beschränkt. Das führt bei Anwendungen mit mehreren Threads zum Teil zu unerwarteten Laufzeitverlängerungen statt Verkürzungen.
Grund: Bei jeder Ausführung von Teilen des Python-Bytecodes wird der GIL gesetzt, Parallelisierung ist so nicht möglich. Auf einer CPU ist die aktuelle Implementierung sinnvoll, Threads laufen jeweils für längere Zeit. Bei mehreren CPUs führt dies zu einem häufigen Wechsel des laufenden Threads, was einen großen Overhead erzeugt. Seit Python 3.2 gibt es einen Ansatz zur Verbesserung (weiterhin mit GIL), aber mit (anderen) Problemen. Der GIL ist einfach und einfach zu verstehen.
Multiprocessing-Einführung am Beispiel - Christian Geier
Beschränkungen des GIL komplett umgehen! Mit dem Modul multiprocessing
kann statt eines Threads ein eigener Python-Prozess gestartet werden
(https://docs.python.org/2/library/multiprocessing.html). Das ist ein
großer Overhead, dafür ist echte Parallelisierung möglich. Bei längeren
Berechnungen fällt der Overhead nicht ins Gewicht. Auch lesenswert:
concurrent.futures (https://docs.python.org/3/library/concurrent.futures.html)
Lightning Talks
Releases verfolgen mit GitHub Stars - Christian Geier
https://sibbell.com, E-Mail-Zusammenfassung der gestarrten GitHub-Repositories, ist jetzt kostenpflichtig. Eigene Implementierung "telescope" nutzt die GitHub-API über das Package github (PyGithub).
Python package: Trueskill - Stephan Porz
Package-Dokumentation: http://trueskill.org/ Demo: https://github.com/data-raccoon/trueskill_ranking
Kneipe
Der Abend wurde mit gemeinsamem Essen, Trinken und regem Gespräch im Herbrands beendet.
Nächster Termin: 09.03.2017
Protokoll des Treffens, gemeinsam im Etherpad mitgeschrieben und aus dem Archiv der Jahre 2013 bis 2020 übernommen.