What customers say ...
Very good course, excellent content. Does require a strong python background which I lacked so perhaps my experience was not typical. Still I learned a very great deal.
Keith Bord, Oracle about the course "Advanced Python" more...
Good content, thorough explanation, and practice sessions. It will be useful in my day-to-day work. Thank you, Mike!!
Ameya Tipnis, QSpin Vlaanderen bvba about the course "Python for Programmers" more...
[The trainer] knows well what scientists need, so his hints are very practical and valuable. The hands-on course [..] covers a wide range of examples and will be very helpful in my daily work. ..
Dorota Jarecka, University of Warsaw, Poland about the course "Python for Scientists and Engineers" more...
I enjoyed the course very much and learned a lot. My interest for quite few of topics was ignited during the course and I will into more details. I understood many principles. All in all: Very good training! Thank you very much all the best.
Dominik Schwinn, German Aerospace Stuttgart about the course "Python für Programmierer und Python für Wissenschaftler und Ingenieure" more...
Very nice course, got many useful suggestions.
Dr.-Ing. Ralf Wieland, Institut für Landschaftssystemanalyse, Leibniz-Zentrum für Agrarlandschaftsforschung e.V. about the German version of the course "Python for Scientists and Engineers" more...
Cython in Depth
Dates for Open Courses
Course available as open and in-house training. Currently no dates for open courses. Please ask us at firstname.lastname@example.org
Our course High-Performance Computing with Python also covers Cython, focussing on the integration with NumPy.
This course is given by a core developer of the Cython open-source project.
The course targets medium level to experienced Python programmers who want to break through the limits of Python performance. A basic understanding of the C language is helpful but not required.
The Python programming language has been used successfully in a large number of application domains. Even performance critical applications, such as scientific computation frameworks or text processing applications, have been realized using Python in order to benefit from short development cycles and highly maintainable code.
However, the interpreted language also has its weaknesses. Tight algorithms in numerical computations and character processing often suffer from the overhead of object operations in arithmetic expressions or memory copies in string slicing. In high performance applications, the optimizations that can be performed at the language level may not be sufficient.
This is where the Cython programming language shows its strength. Cython is a general purpose programming language that forms a best-of-both-worlds cross between the Python language and the ubiquitous datatypes of the C/C++ language. It comes with an optimising compiler that translates Python code into C code for Python extension modules, and tightly adapts the generated code to the available static type information.
Cython code can be written as high-level Python code and manually optimised in well selected hot-spots by statically declaring data types or calling directly into external code written in C, C++ or compatible languages. This makes the entire range from simple, expressive Python code down to highly optimized, low-level C code available for programming in a single language.
The objective of this course is to get to know the Cython language, and to learn how to use it to speed up Python code by orders of magnitude. You will also learn how to wrap external C libraries to efficiently and comfortably use them from Python.
My first Cython extension
- using pyximport to quickly (re-)build extension modules
- using cython.inline() to compile code at runtime
- building extension modules with distutils
Speeding up Python code with Cython
- fast access to Python's builtin types
- fast looping over Python iterables and C types
- string processing
- fast arithmetic
- incrementally optimizing Cython code
- multi-threading outside of the GIL (Global Interpreter Lock)
Interfacing with external C code
- calling into external C libraries
- building against C libraries
- writing Python wrapper APIs
- calling C functions across extension module boundaries
Use of Python's buffer interface from Cython code
- directly accessing data buffers of other Python extensions
- retrieving meta data about the buffer layout
- setting up efficient memory views on external buffers
Implementing fast Cython loops over NumPy arrays
- looping over NumPy exported buffers
- implementing a simple image processing algorithm
- using "fused types" (simple templating) to implement an algorithm once and run it efficiently on different C data types
Use of parallel loops to make use of multiple processing cores
- building modules with OpenMP
- processing data in parallel
- speeding up an existing loop using OpenMP threads
Note: the part on parallel processing requires a C compiler that supports OpenMP, e.g. gcc starting with 4.2, preferably 4.4 or later. It should be readily available in recent installations of both Linux and MacOS-X. Note that recent versions of XCode use the "clang" compiler, which does not support OpenMP. On these systems, please install gcc separately and make sure it can be used from your CPython installation. Users of Microsoft Windows must install the C compiler that was used to build their Python installation, e.g. the VS2008 Express or MinGW for Python 2.7.
The participants are encouraged to send in short code examples from their own experience that they would like to see running faster by using Cython. Based on general interest and practicality, one or two of these examples will be examined as a case study. These examples must be available to the teacher at least one week before the course, and must be short but complete executable examples, including sufficient input data for benchmarking. Please be aware that example code that requires a substantial amount of explanation or background knowledge about a specific application domain will not be accepted.
The participants can follow all steps directly on their computers. There are exercises at the end of each unit providing ample opportunity to apply the freshly learned knowledge.
Every participant receives comprehensive printed materials that cover the whole course content as wells a CD with all source codes and used software.
The Python Academy is sponsor of PyCon Ireland 2016.
The Python Academy is sponsor of EuroSciPy 2016.
The Python Academy is sponsor of PyCon US 2016.
The Python Academy is sponsor of PyData Berlin 2016.
The Python Academy is sponsor of PyCon Sweden 2016.
The Python Academy is sponsor of Python Unconference 2015.
The Python Academy is sponsor of EuroSciPy 2015.
The Python Academy is sponsor of EuroPython 2015.
The Python Academy is sponsor of PyData Berlin 2015.
The Python Academy is sponsor of PyCon Montréal 2015.
The Python Academy is sponsor of Python BarCamp Köln 2015.
The Python Academy is sponsor of Chemnitzer Linux-Tage 2015.
The Python Academy is sponsor of Django Girls Wroclaw 2015.
The Python Academy is sponsor of PyCon Ireland 2014.
The Python Academy is sponsor of EuroSciPy 2014.
The Python Academy is sponsor of PyData London 2014.
The Python Academy is sponsor of EuroPython 2014.
The Python Academy is sponsor of PyCon 2014 Montréal.
The Python Academy is sponsor of Python BarCamp Köln 2014.
The Python Academy is sponsor of PyConDE 2013.
The Python Academy is sponsor of EuroPython 2013.
The Python Academy is sponsor of PyCon US 2013.
The Python Academy is sponsor of EuroSciPy 2013.
The Python Academy is sponsor of PyConPL 2012.
The next open cousers
Python Academy sponsors EuroPython conference 2013
Python Academy sponsors EuroSciPy conference 2013
Python Academy sponsors Python BarCamp in Cologne
Next Meeting of Leipzig Python User Group, November 12, 2013
Introduction to Django, November 11 - 13, 2013
Professional Testing with Python, November 25 - 27, 2013
Advanced Django, January 13 - 15, 2014
Python Academy sponsors PyCon US conference 2013
Python Academy founder receives PSF Community Service Award