[python-users] Performance-Optimierung einiger Berechnungen

Christopher Arndt chris at chrisarndt.de
Do Dez 5 16:45:19 CET 2013


On 05.12.2013 15:58, marian wrote:
> Was ich nun an Cython noch nicht verstanden habe: Wie 
> plattformspezifisch wird damit der Code?
>
> Soll immer eine pure Python-Variante (.py) neben der Cython-Variante 
> (.pyx) eines Moduls liegen bleiben, als plattformübergreifende
> Fallback Lösung? Muss ich dann den Code doppelt pflegen?

Der von Cython erzeugte Code muss für jede Plattform (d.h. das Produkt
aus OS, Architektur und Python-Version) kompiliert werden. Der C-Code
muss nur einmal erzeugt werden (.pyx -> .c) und ist platform-unabhängig
und kann auch für Python 2 und 3 kompiliert werden. Beides macht
setup.py aber automatisch. Trotzdem hast du damit eine C-Extension, mit
den üblichen Nachteilen bei der Distribution. Der Benutzer muss aber
nicht Cython selbst installieren, wenn du die erzeugte C-Datei in der
Source-Distribution einschließt (z.B. über MANIFEST.in).

Eine parallele Pure-Pythonimplementierung empfiehlt sich, wenn man davon
ausgeht, dass es Benutzer gibt, die aus einer Source-Distribution
installieren und keinen Compiler installiert haben. Und ja, das bedeutet
u.U. doppelte Pflege, wobei es Möglichkeiten gibt, Cython-Code sowohl
interpretiert als auch kompiliert zu nutzen:

http://docs.cython.org/src/tutorial/pure.html

Ohne Compiler sind v.a. "normale" Windowsbenutzer, für die man aber
leicht mit "setup.py bdist_wininst" binäre Installerpakete erzeugen
kann. Man braucht dazu aber ein Windowssystem mit Visual Studio
(Express) 2008 (für Python <= 3.1(?)) und Visual Studio (Express) 2010
(für Python >= 3.2). Und natürlich alle unterstützten Python-Version in
jeweils 32 und 64-bit Varianten. Wobei leider leider "setup.py build"
auf Windows mit Python 64-bit Builds und Visual Studio Express momentan
nicht out-of-the-box funktioniert.

http://bugs.python.org/issue7511

> Christopher, ich nehme an, Du hast nichts dagegen, wenn ich Dich in
den credits von Audiocalc erwähne?

Kein Problem.


Chris



Mehr Informationen über die Mailingliste python-users