2013-07-19 19 views
6

Grundsätzlich mag ich eine Python-Programm Anruffunktionen in CPython-C-Integration: Ctypes, CFFI oder erstellen Sie eine Binär-Modul

So (soweit ich weiß wie) meine Optionen sind geschrieben machen:

  • ctypes/CFFI
    • eine DLL erstellen/SO/dylib die C-Funktionen enthalten, und auf sie zugreifen ctypes oder CFFI verwenden. Anscheinend CFFI ist viel schneller mit dem einzigen Nachteil, in Python alle Funktionen Signaturen zu deklarieren.
    • Vorteile:
      • Sie haben noch keine Anpassung in meinen C-Funktionen zu machen. Die gesamte Typ-Übersetzung erfolgt in Python.
    • Nachteile:
      • Leistung?
  • Python Binärmodul
    • eine Python-Schnittstelle in C schreiben, mein C-Modul in eine binären Python-Modul Umwandlung
    • Pro:
      • Leistung?
    • Nachteile:
      • All Typ-Übersetzung ist in C mit [SIP] erfolgen [3] könnte dies automatisiert werden.

umrechnen C-Modul in einen Python Binärmodul ist wirklich schneller?

Unterstützt beide Lösungen das Senden von Python-Callbacks an C-Funktionen?

Ist SIP eine gute Option, um eine Python-Schnittstelle zu generieren? Gibt es noch andere Möglichkeiten?

Gibt es irgendwelche anderen Besonderheiten?

+1

Gefunden einige gute Sachen: [5 Möglichkeiten, Python mit nativem Code zu verwenden] (http://kos.gd/2013/01/5-ways-to-use-python-with-native-code/), [ Python Wrapper Tools: Eine Leistungsstudie] (http://web.archive.org/web/20070703071726/http://people.web.psi.ch/geus/talks/europython2004_geus.pdf) – romulof

Antwort

1

Ich war nur eine alte Liste der Optionen bewerten den ich im Zusammenhang mit dieser Veröffentlichung: http://stromberg.dnsalias.org/~strombrg/speeding-python/

Wenn Sie nur CPython (2.x oder 3.x) Targeting, ich wahrscheinlich für Cython gehen würde.

Wenn Sie auch auf Pypy laufen möchten, könnte CFFI gut sein; Ich habe es noch nicht ausprobiert, aber es klingt großartig.Es ist jedoch nicht ganz wie Ctypes - Ctypes ist mehr ABI-Level, während CFFI ist mehr API-Ebene - das ist schön.

Wenn Sie auch auf Jython laufen möchten, ist Subprocess wahrscheinlich die beste Wahl.

+1

Die C-Funktionen sind bereits geschrieben. Tonnen stabiler Code. Ich bin nur auf der Suche nach einer Möglichkeit, dann in Python zu verwenden. – romulof

+0

Das ist interessant, obwohl meine Vorschläge wahrscheinlich immer noch gelten. – dstromberg

+0

Angeblich ist Ctypes langsam bei der Python <-> C Grenze. Sie haben dies für einige häufige Anwendungen in Pypy optimiert. – dstromberg