티스토리 수익 글 보기

Dr. Ing. Stefan Behnel
Python – Software und Beratung
»der leichte Weg zu schnellem Code«
Wer bin ich?
Ich bin ein erfahrener Open-Source Software-Entwickler, IT-Trainer und Consultant im Python-Umfeld, Gründungsmitglied des Python Software Verband e.V., und “Fellow” der Python Software Foundation (PSF). Die meisten meiner Projekte befassen sich mit High-Performance-Tools und schnellem Code. Ich arbeite an diesen Projekten weil ich es mag, performance-kritischen Code zu optimieren. Und weil ich es mag, Software-Werkzeuge zu schreiben, die es Entwicklern leicht machen, schnellen Code zu schreiben. Denn mit den richtigen Werkzeugen wird das wirklich einfach.
Mein Doktortitel wurde mir von der Technischen Universität Darmstadt am Institut für Datenbanken und Verteilte Systeme verliehen, das von Professor Alejandro Buchmann geleitet wurde. Meine Doktorarbeit über effiziente, modellbasierte Software-Entwicklung von hochskalierbaren, selbstverwaltenden verteilten Systemen ist online verfügbar.
Was biete ich an?
- Vorträge und Schulungen (auch In-House)
- Software-Entwicklung und Optimierung
- Professionelle Code-Reviews
- Beratung
- Python Performance-Optimierung
- High-Performance XML-Verarbeitung
- Cython-Programmierung.
Schulungen:
- Python-Kurse der CondingAkademie (DE/EN, 2-3 Tage)
- Clean Code und Testing in Python (DE/EN, 2-3 Tage)
- Fast code with the Cython compiler (DE/EN, 1-2 Tage)
- High Performance XML Processing in Python (DE/EN, 1-2 Tage)
Aktuell wohne ich in Celle, in der Nähe von Hannover, aber auch
längere Anreisen sind kein Problem.
Bitte kontaktieren Sie mich
unter der Adresse
< consulting (AT) behnel.de >.
Ausgewählte Vorträge
- Cython to speed up your Python code (video),
at EuroPython 2018, Edinburgh, UK, 2018
- Cython to the Rescue (video),
at PyConCZ 2018, Praha, Czech Republic, 2018
- Lift your Speed Limits with Cython (video, slides, notebook, interview),
at FOSDEM 2018, Bruxelles, Belgium, February 2018
- Lift your Speed Limits with Cython (video),
at PyCon-DE 2017, Karlsruhe, Germany, October 2017
- Intro to Cython (tutorial, video),
at EuroSciPy 2017, Erlangen, Germany, August 2017
- Introduction to Tornado (tutorial),
at PyCon.Web 2017, München, Germany, May 2017
- Getting native with Cython (video),
at PyCon.DE 2016, München, Germany, October 2016
- Fast Async Code with Cython and AsyncIO (video),
at EuroPython 2016, Bilbao, Spain, July 2016
- NumPy with Cython (tutorial),
at EuroPython 2016, Bilbao, Spain, July 2016
- Get native with Cython (video, examples)
at EuroPython 2015, Bilbao, Spain, July 2015
- The Cython Compiler for Python (video)
at EuroPython 2014, Berlin, Germany, July 2014
- XML generieren mit lxml (video)
at PyCon-DE 2013, Köln, Germany, October 2013
- Cython für schnelleren Python-Code (video)
at PyCon-DE 2013, Köln, Germany, October 2013
- Lupa – LuaJIT in Python (video)
at PyCon-DE 2013, Köln, Germany, October 2013
- Schneller ohne C++ (video)
at PyCon-DE 2012, Leipzig, Germany, October/November 2012
- Schnelle Schleifen mit Cython (video)
at PyCon-DE 2012, Leipzig, Germany, October/November 2012
- lxml – schnelles XML mit Python
at PyCon-DE 2011, Leipzig, Germany, October 2011
- Cython – das Beste aus Python und C
at PyCon-DE 2011, Leipzig, Germany, October 2011
- Using the Cython compiler to write fast Python code
at FACETS CodeJam Workshop #3, invited talk and tutorial, Freiburg, Germany, October 2009
- The Cython Compiler for C-extensions in Python
at EuroPython 2008, Vilnius, Lituania, July 2008 - Implementing XML languages with lxml
at EuroPython 2008, Vilnius, Lituania, July 2008 - XML mit Python – Eine Einführung
at the 1st Workshop “Python im deutschsprachigen Raum”, Leipzig, Germany, September 2006
Projektangebot
Die folgende Liste nennt einige interessante Software-Entwicklungsprojekte die ich gerne umsetzen würde. Wenn Sie Interesse an deren Implementierung haben und sie finanziell unterstützen möchten, kontaktieren Sie mich bitte unter der Adresse < consulting (AT) behnel.de >.
- Offene Aufgaben rund um das Cython Compiler
Projekt:
- Neuimplementierung von “Inlined Generator Expressions”: Vor der vollständigen Unterstützung für Generatoren (“yield”) boten Cython 0.13 und 0.14 eine Optimierung für bestimmte Generator-Ausdrücke. Wenn diese in Builtins hineingereicht werden, konnte in einigen Fällen der Generator in eine einfache Schleife umgewandelt werden. Dies bringt einen beachtlichen Geschwindigkeitsvorteil, da erstens der wiederholte Aufrufaufwand für den Generator wegfällt und zweitens Cython in vielen Fällen den Datentyp des Ergebnisses besser optimieren kann. Leider kollidierte die ursprüngliche Optimierung mit der späteren Implementierung von allgemeinen Generatoren und musste entfernt werden. Die Aufwandsschätzung für eine Neuimplementierung beträgt etwa zehn bis 15 Tage.
- Sprachunterstützung für “borrowed references”: In der Sprache Cython gibt es bisher keine Unterstützung für Objektreferenzen, die nicht dem Reference-Counting unterliegen. Daher haben alle Zuweisungen von Objektreferenzen leichte Performance-Auswirkungen und können weniger gut durch den C-Compiler optimiert werden. Auch sind Objektreferenzen nicht innerhalb von Code-Blöcken erlaubt, die den “global interpreter lock” (GIL) von CPython freigeben. Sprachunterstützung für geliehene Referenzen würde somit einfacheren und schnelleren Code erlauben. Der Status dieses Features findet sich in Trac-Ticket 498. Die Aufwandsschätzung beträgt etwa zehn Tage für die explizite Sprachunterstützung sowie optional einige weitere Tage für darauf aufbauende Optimierungen des Compilers um dieses Feature wo möglich auch ohne explizite Deklaration zu verwenden.
- Offene Aufgaben rund um das lxml Projekt:
- Dokument-Locks: lxml hat eine lange Historie von Threading-Problemen und verwendet Threading daher nur an sehr ausgewählten und sicheren Stellen. Das reduziert die Parallelität bei der XML-Verarbeitung weit unter das Mögliche. Ziel dieses Projekts ist es, Locking auf Dokument-Ebene zu implementieren, so dass der GIL bei mehr Operationen sicher frei gegeben werden kann. Die Aufwandsschätzung beträgt etwa zehn bis 15 Tage.
- Bessere Parallelität beim inkrementellen Parsen: Aktuell speichert lxml SAX-Events auf Python-Ebene und benötigt dazu bei jedem Ausruf aus libxml2 den GIL (Pythons Global Interpreter Lock). Ziel dieses Projektes ist es, die Events auf C-Ebene zwischenzuspeichern und erst nach Abarbeitung eines Datenblocks in Python-Events umzuwandeln. Dadurch könnte der GIL für die gesamte Dauer des Parsens eines Datenblockes freigegeben werden, was zu wesentlich besserer Parallelität und Performance führt. Die Aufwandsschätzung beträgt etwa zehn Tage.
- Offene Aufgaben rund um das Lupa Projekt:
- Direkte Unterstützung für Pythons Buffer-Interface in Lua: Seit Version 2.6 hat CPython eine exzellente C-Schnittstelle zum Zugriff auf interne Datenspeicherbereiche, so auch auf Matrizen in NumPy. Die Integration in Lupa würde eine direkte und sehr effiziente Verwendung dieser Speicher aus Lua-Code heraus ermöglichen, insbesondere durch LuaJITs neue, schnelle FFI-API.
Projektreferenzen
Die wichtigsten Projekte, an denen ich in den letzten Jahren
gearbeitet habe, sind
lxml und Cython.
Lupa ist ein neues
Projekt, das sich noch in seien Anfängen befindet.
Cython
Die Programmiersprache Cython ist ein Dialekt der Sprache Python. Sie bietet optionale statische Typ-Deklarationen und wird in schnellen C-Code übersetzt. Ihre Anwendungsgebiete als allgemeine Programmiersprache sind breit gestreut. Vor allem im Bereich des Scientific Computing ist sie aber einer der Gründe für die weite Verbreitung von Python als eine der wichtigsten Programmiersprachen. Nicht unbedingt, weil sie Fortran ersetzen wollte. Sondern weil es wesentlich einfacher ist, den Hauptteil des Codes in einer Hochsprache zu schreiben, und ihn dann mit kleinen Mengen an handoptimiertem low-level Code zusammenzufügen.
Cython ist eine perfekte 80/20 Sprache. Es verbindet auf einzigartige Weise eine hohe Entwicklungsgeschwindigkeit beim Großteil des Source-Codes einer Anwendung mit der leichten Optimierbarkeit kleiner, kritischer Code-Teile. Zusätzlich zu der leichten und schnellen Software-Entwicklung, für die Python bekannt ist, erlaubt Cython eine merkliche Code-Beschleunigung durch das einfache Hinzufügen statischer Typ-Deklarationen in genau den performance-kritischen Sektionen, die sich in Benchmarks offenbaren. Und wenn blanke Performance gefragt ist, lassen sich sehr leicht einzelne Code-Bereiche in C, C++, Fortran oder kompatiblen Sprachen reimplementieren und einbinden.
Meine Leistungen als Mitbegründer und Core-Entwickler des Cython-Projekts beinhalten zahlreiche Compiler-Optimierungen auf allen Ebenen, wichtige Design-Entscheidungen und die Implementierung mehrerer großer Features aus der Programmiersprache Python. Zudem zeichne ich mich für Design und Implementierung einiger Sprach-Features verantwortlich, die Cython zu einer einzigartigen Sprache in der Integration von Python und C machen.
lxml
Nach mehreren Jahren stetiger Weiterentwicklung hat sich lxml längst den Titel der führenden high-performance XML-Bibliothek für Python erworben. Es bietet eine einzigartige Kombination aus zahllosen XML-Features, einer sehr hohen Geschwindigkeit und einer erstaunlichen Leichtigkeit der Benutzung. Die wohlbekannten C-Bibliotheken libxml2 and libxslt bilden die standard-konforme Basis, die lxml mit Hilfe von Cython zu einer hochintegrierten, objekt-orientierten XML-API verbindet.
Als Leiter des lxml Projekts bin ich für die wesentlichen Entwicklungen an der Code-Basis verantwortlich, für Design und Projekt-Management. Zudem entwickelte ich einen großen Teil der Implementierung, der wichtigsten Features und Performance-Optimierungen, die lxml so nützlich für die XML-Verarbeitung unter Python machen.
Lupa
https://github.com/scoder/lupa
Lupa ist ein Python-Wrapper für die schnelle Lua-Laufzeitumgebung LuaJIT2. Es ist in Cython implementiert und ermöglicht die bidirektionale Kommunikation zwischen Lua-Code und Python-Code.
Lua ist eine sehr gute Ergänzung zu Python. Als Sprache ist es ähnlich dynamisch wie Python, aber LuaJIT übersetzt es in sehr schnellen Maschinencode, teilweise sogar schneller als viele statisch kompilierte Sprachen. Die Laufzeitumgebung ist extrem klein und in allen Bereichen auf Embedding optimiert. Das vollständige Binärmodul von Lupa, inklusive der statisch eingebundenen LuaJIT2 Umgebung, ist auf einem 64-bit System gerade einmal 500KB groß.
Jedoch lassen Lua und seine Umgebung auch einiges vermissen was
Python-Entwickler als selbstverständlich ansehen, sei es als Teil der
Python Standardbibliothek (“Batteries included”) oder an verfügbaren
Bibliotheken und Entwicklerwerkzeugen. Diese Beschränkungen machen die
Entwicklung von Lua-Anwendungen aufwändiger als vergleichbare
Python-Anwendungen. Daher wird Lua nur selten als
Hauptentwicklungssprache für größere Anwendungen verwendet. Als
schnelle, dynamische und speicherfreundliche Hilfssprache innerhalb der
Python Laufzeitumgebung macht es jedoch eine sehr gute Figur wenn hohe
Geschwindigkeit gefragt ist und die Umlaufzeit des “edit-compile-run”
Zyklus zu schwerfällig für agile Code-Entwicklung und das
Hot-Deployment von Software-Komponenten wird.
Als Leiter des Lupa Projekts bin ich für die wesentlichen Entwicklungen an der Code-Basis verantwortlich, für Design und Projekt-Management ebenso wie für die Implementierung.
Veröffentlichungen
- Cython – The Best of Both Worlds (preprint)
Stefan Behnel, Robert Bradshaw, Craig Citro, Lisandro Dalcín, Dag Sverre Seljebotn, Kurt Smith
In: Fernando Pérez, Brian E. Granger, John D. Hunter, editors, “Python: an ecosystem for scientific computing”, Computing in Science and Engineering, March 2011 - Cython Tutorial
Stefan Behnel, Robert W. Bradshaw, Dag Sverre Seljebotn
Proceedings of the 8th Python in Science Conference (SciPy2009), Pasadena, CA, USA, August 2009 - A Model Driven Architecture for Adaptable Overlay Networks
Stefan Behnel
Doctoral Thesis, Darmstadt University of Technologies, Darmstadt, Germany, August 2007 - SLOSL – A Modelling Language for Topologies and Routing in Overlay Networks
Stefan Behnel
Proc. of the 1st Int. Workshop on Modeling, Simulation and Optimization of Peer-to-peer environments (MSOP2P), Naples, Italy, February 2007 - A Specification-to-Deployment Architecture for Overlay Networks
Stefan Behnel, Alejandro Buchmann, Paul Grace, Barry Porter, Geoff Coulson
Proc. of the Int. Symposium on Distributed Objects and Applications (DOA), Montpellier, France, October 2006 - XML mit Python – Eine Einführung
Stefan Behnel
Workshop Proc. “Python im deutschsprachigen Raum”, Leipzig, Germany, September 2006 - On Quality-of-Service and Publish/Subscribe
Stefan Behnel, Ludger Fiege, Gero Mühl
Fifth International Workshop on Distributed Event-based Systems (DEBS’06), Lisbon, Portugal, July 2006
Received “DEBS 2006 Most Influential Paper” award in 2019. - Overlay Networks – Implementation by Specification
Stefan Behnel, Alejandro Buchmann
Proceedings of the International Middleware Conference (Middleware2005), Grenoble, France, November 2005 - Models and Languages for Overlay Networks
Stefan Behnel, Alejandro Buchmann
Proc. of the 3rd Int. VLDB Workshop on Databases, Information Systems and Peer-to-Peer Computing (DBISP2P 2005), Trondheim, Norway, August 2005 - Bit Zipper Rendezvous – Optimal Data Placement for General P2P Queries
Wesley W. Terpstra, Stefan Behnel, Ludger Fiege, Jussi Kangasharju, Alejandro Buchmann
EDBT 04 Workshop on Peer-to-Peer Computing & DataBases, Heraclion, Grece, March 2004
Received the best-paper award. - A Peer-to-Peer Approach to Content-Based Publish/Subscribe
Wesley W. Terpstra, Stefan Behnel, Ludger Fiege, Andreas Zeidler, Alejandro P. Buchmann
In Proceedings of the 2nd International Workshop on Distributed Event-Based Systems (DEBS’03), ACM Press, San Diego, CA, USA, June 2003
Received “DEBS 2003 Most Influential Paper” award in 2019.