9

基本的には、Python プログラムで C で記述された関数を呼び出したいと考えています。

だから(私が知る限り)私のオプションは次のとおりです。

  • CTypes/ CFFI
    • C 関数を含む DLL/SO/DyLib を作成し、 CTypes またはCFFIを使用してそれらにアクセスします。どうやらCFFIの方がはるかに高速ですが、すべての関数シグネチャを Python で宣言する必要があるという唯一の欠点があります。
    • 長所:
      • 私の C 関数に適応させる必要はありません。すべての型変換は Python で行われます。
    • 短所:
      • パフォーマンス ?
  • Python バイナリ モジュール
    • C で Python インターフェイスを作成し、C モジュールをバイナリ Python モジュールに変換します
    • 長所:
      • パフォーマンス ?
    • 短所:
      • すべての型変換は C で行われます。[SIP][3] を使用すると、これが自動化される場合があります。

C モジュールを Python バイナリ モジュールに変換した方が本当に速いですか?

どちらのソリューションも、C 関数への Python コールバックの送信をサポートしていますか?

SIP は Python インターフェイスを生成するための適切なオプションですか? 他にオプションはありますか?

それらのいずれかに他の特徴はありますか?

4

1 に答える 1

1

これに関連して公開したオプションの古いリストを見直していました: http://stromberg.dnsalias.org/~strombrg/speeding-python/

CPython (2.x または 3.x) のみをターゲットにしている場合は、おそらく Cython を使用します。

Pypy でも実行できるようにしたい場合は、CFFI が適している可能性があります。まだ試していませんが、素晴らしい音です。ただし、ctypes と完全に同じというわけではありません。ctypes はより ABI レベルですが、CFFI はより API レベルです。これは素晴らしいことです。

Jython でも実行できるようにしたい場合は、サブプロセスがおそらく最善の策です。

于 2013-07-19T21:32:19.827 に答える