Performance von ctypes ist überragend


Die neu entdeckte ctypes Schnittstelle in Python habe ich einer näheren Untersuchung unterzogen. In C wird zunächst eine Primzahlen Funktion definiert, die eine große Last auf der CPU erzeugt. Diese wird dann in eine Binär-Library kompilert und über Python eingebunden. Dann wird die Ausführungszeit verglichen. Die Laufzeit mit ctypes ist dieselbe als wenn man das C-Programm solo startet. Zur Verdeutlichung hier der Sourcecode:

/*
  Kompilieren:
    gcc -shared -Wl,-soname,prim -o prim.so -fPIC prim.c
  
  Python:
    import ctypes
    prim = ctypes.CDLL('/tmp/1/prim.so')
    prim.main()
  
  Performance: 
    gcc real	0m6.557s
    python real	0m6.578s
*/

#include <stdio.h>
int main() {
  int flag;
  for (int i=0;i<300000;i++) {
    flag=0;
    for (int a=2;a<=i/2;a++) {
      if (i%a==0) { 
        flag=1;
        break;
      }
    }
    if (flag==0) printf("%d\n",i);
  }
  return 0;
}

Natürlich ist das ganze nicht wirklich eine Neuigkeit weil das PyPi Repository wo bereits sehr viele C-Librarys gewrapped wurden ja bereits existiert. Das heißt, dass man C mit Python koppeln kann, haben schon andere Leute herausgefunden. Interessant daran ist jedoch, dass es zukunftsfähig ist. Das heißt man kann davon ausgehen, dass Python eine ausgezeichnete Perspektive besitzt. Weil man auch eigene C-Programme leicht dafür aufbereiten kann. Wenn jedoch Python Programme auf C-Bibliotheken zugreifen, ist die Programmiersprache unschlagbar. C ist zweifellos die performanteste Sprache überhaupt.

Ctypes, SWIG oder CFFI dürfte einer breiten Öffentlichkeit nahezu unbekannt sein. Wir haben es also mit einem sehr leistungsfähigen Konzept zu tun, was gleichzeitig unbekannt ist. Stattdessen denkt der Mainstream, dass Java oder C# die Zukunft wäre.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s