2013-07-19 18 views
6

Zasadniczo chcę zarobić funkcji połączeń Program Python napisany w C.Python-C integracja: ctypes, CFFI lub utwórz Binary moduł

SO (o ile wiem) Kim są następujące opcje:

  • ctypes/CFFI
    • Tworzenie DLL/so/dylib zawierające funkcje C i dostęp do korzystania z nich ctypes lub CFFI. Podobno CFFI jest o wiele szybszy z jedyną wadą konieczności zadeklarowania w python wszystkich podpisów funkcji.
    • Plusy:
      • nie trzeba dokonywać żadnych adaptacji w moich funkcji C. Wszystkie tłumaczenia typu są wykonywane w języku Python.
    • Wady:
      • wydajność?
  • Python Binary Moduł
    • Napisz interfejs Pythona w C, konwersja mój moduł C do binarnego modułu Pythona
    • Plusy:
      • wydajność?
    • Wady:
      • All typu tłumaczenie odbywa się w C. Używając [SIP] [3], że to może być zautomatyzowane.

Konwersja moduł C do Pythona modułu binarnego jest naprawdę szybciej?

Czy oba rozwiązania umożliwiają przesyłanie wywołań Pythona do funkcji C?

Czy SIP jest dobrym rozwiązaniem do generowania interfejsu Pythona? Czy są jakieś inne opcje ?

Czy są jakieś inne cechy szczególne?

+1

Znaleziono kilka dobrych rzeczy: [5 sposobów używania Pythona z natywnym kodem] (http://kos.gd/2013/01/5-ways-to-use-python-with-native-code/), [ Python Wrapper Tools: A Badanie wydajności] (http://web.archive.org/web/20070703071726/http://people.web.psi.ch/geus/talks/europython2004_geus.pdf) – romulof

Odpowiedz

1

właśnie przeglądając starą listę opcji wydałem związane z tym: http://stromberg.dnsalias.org/~strombrg/speeding-python/

Jeśli tylko kierowanie CPython (2.x lub 3.x), prawdopodobnie pójść na Cython.

Jeśli chcesz być w stanie uruchomić również na Pypy, CFFI może być dobre; Jeszcze tego nie próbowałem, ale brzmi świetnie.Nie jest to jednak zupełnie jak ctypes - ctypes ma wyższy poziom ABI, podczas gdy CFFI ma wyższy poziom API - co jest miłe.

Jeśli chcesz mieć możliwość uruchamiania na Jythonie, podproces jest prawdopodobnie najlepszym rozwiązaniem.

+1

Funkcje C są już pisemny. Tony stabilnego kodu. Poszukuję tylko sposobu użycia w pythonie. – romulof

+0

To interesujące, chociaż moje sugestie nadal mają zastosowanie. – dstromberg

+0

Podobno ctypes jest powolny na granicy Pythona <-> C. Zoptymalizowali to dla niektórych typowych zastosowań w Pypy. – dstromberg