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

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.