2013-07-19 15 views
6

Fondamentalmente io voglio fare un funzioni di chiamata programma Python scritte in C.Python-C integrazione: ctypes, CFFI o creare un modulo binario

Così (per quanto ne so) le mie opzioni sono:

  • ctypes/CFFI
    • creare una DLL/SO/DyLib contenente le funzioni C e accedervi utilizzando ctypes o CFFI. Apparentemente CFFI è molto più veloce con l'unico inconveniente di dover dichiarare in python tutte le firme delle funzioni.
    • Pro:
      • non c'è bisogno di fare alcun adattamento nelle mie funzioni C. Tutte le traduzioni di tipo sono fatte in Python.
    • Contro:
      • prestazioni?
  • Python binario Modulo
    • Scrivi un'interfaccia Python in C, la conversione di mio modulo C in un modulo Python binario
    • Pro:
      • prestazioni?
    • Contro:
      • All-tipo di traduzione è fatto in C. Con [SIP] [3] questo potrebbe essere automatizzato.

Convertire il modulo C in un modulo binario Python è davvero più veloce?

Le due soluzioni supportano l'invio di callback Python alle funzioni C?

SIP è una buona opzione per generare un'interfaccia python? Ci sono altre opzioni?

Ci sono altre particolarità in ognuna di esse?

+1

Trovato alcune cose buone: [5 modi per utilizzare Python con codice nativo] (http://kos.gd/2013/01/5-ways-to-use-python-with-native-code/), [ Python Wrapper Tools: A Performance Studio] (http://web.archive.org/web/20070703071726/http://people.web.psi.ch/geus/talks/europython2004_geus.pdf) – romulof

risposta

1

Stavo rivedendo un vecchio elenco di opzioni ho pubblicato relativo a questo: http://stromberg.dnsalias.org/~strombrg/speeding-python/

Se si sta solo mira CPython (2.x o 3.x), probabilmente sarei andare per Cython.

Se vuoi essere in grado di eseguire anche su Pypy, CFFI potrebbe essere buono; Non l'ho ancora provato, ma suona alla grande.Tuttavia non è del tutto come i ctypes - i ctypes sono più ABI, mentre CFFI è più API, il che è bello.

Se si vuole essere in grado di eseguire anche su Jython, il sottoprocesso è probabilmente la soluzione migliore.

+1

Le funzioni C sono già scritto. Tonnellate di codice stabile. Sto solo cercando un modo per usarlo in Python. – romulof

+0

Questo è interessante, anche se probabilmente i miei suggerimenti si applicano ancora. – dstromberg

+0

Presumibilmente i ctypes sono lenti al limite del python <-> C. Hanno ottimizzato questo per alcuni usi comuni in Pypy. – dstromberg

Problemi correlati