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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s