2013-07-19 6 views
6

基本的に私はC.のPython-Cの統合:ctypesの、CFFIまたはバイナリモジュールを作成

に書かれたPythonプログラム呼び出し機能を作りたいので、(私の知る限りでは)私のオプションは以下のとおりです。

  • のctypes/CFFI
    • SO/DyLibは、C関数を含むとctypesの又はCFFIを使用してアクセス/ DLLを作成します。明らかにCFFIは、Pythonですべての関数シグネチャを宣言しなければならないという唯一の欠点を持っています。
    • 長所:
      • 私のC関数内の任意の適応をする必要はありません。すべての型変換はPythonで行われます。
    • 短所:
      • パフォーマンス?
        • パフォーマンス:
    • Pythonのバイナリモジュール
      • は、バイナリのpythonモジュール
      • 専門家に私のCモジュールを変換し、Cでのpythonインターフェイスを書きますか?
    • 短所:
      • すべてのタイプの翻訳は、[3]、これは自動化される可能性があります[SIP]を使用してCで行われます。

pythonのバイナリモジュールにCモジュールの変換は本当に速いのですか?

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

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

いずれか他の特殊性はありますか?

+1

いくつかの良いものが見つかりました:[ネイティブコードでPythonを使用する5つの方法](http://kos.gd/2013/01/5-ways-to-use-python-with-native-code/)、[ Pythonラッパーツール:A パフォーマンス調査](http://web.archive.org/web/20070703071726/http://people.web.psi.ch/geus/talks/europython2004_geus.pdf) – romulof

答えて

1

私はちょうど私がこれに関連して発行されたオプションの古いリストを見直しました: http://stromberg.dnsalias.org/~strombrg/speeding-python/

あなたが唯一のCPythonの(2.xまたは3.xの)をターゲットにしている場合、私はおそらくCythonのために行くと思います。

Pypyでも実行できるようにしたい場合は、CFFIが良いかもしれません。私はまだそれを試していないが、それは素晴らしいと思う。しかし、ctypesはもっとABIレベルですが、CFFIはもっとAPIレベルです - これは素晴らしいことです。

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

+1

C関数は既に使用されています書きました。安定したコードのトン。 私はPythonでそれを使用する方法を探しています。 – romulof

+0

興味深いですが、私の提案はおそらくまだ適用されています。 – dstromberg

+0

おそらくctypesはPython <->の境界で遅いです。彼らはPypyの一般的な用途のためにこれを最適化しました。 – dstromberg

関連する問題