問題タブ [python-cffi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Numpy 配列を cffi 関数に渡す方法と、それを元に戻す方法は?
Python と Numpy を使用してオーディオ アルゴリズムを開発しています。ここで、そのアルゴリズムの一部を C で実装することにより、そのアルゴリズムを高速化したいと考えています。以前は、cython を使用してこれを実行しました。今度は、新しいcffiを使用して同じことをしたいと思います。
テスト目的で、単純な C 関数を作成しました。
ここで、2 つの numpy 配列を作成し、それらをこの関数で処理したいと考えています。私はそれを行う方法を見つけました:
ただし、このコードを改善したいと思います。
- それらをコピーせずに、numpy 配列の基になる浮動小数点バッファーに直接アクセスする方法はありますか?
ffi.buffer
C 配列の内容を Numpy 配列にすばやく変換するのに非常に便利です。個々の要素をコピーせずに、numpy 配列を C 配列にすばやく変換する同等の方法はありますか?- 一部のアプリケーションで
float_in[0:16] = arr_in[0:16]
は、データにアクセスする便利な方法です。ただし、その逆はarr_out[0:16] = float_out[0:16]
機能しません。なぜだめですか?
python - Python-C 統合: Ctypes、CFFI、またはバイナリ モジュールの作成
基本的には、Python プログラムで C で記述された関数を呼び出したいと考えています。
だから(私が知る限り)私のオプションは次のとおりです。
- CTypes/ CFFI
- Python バイナリ モジュール
- C で Python インターフェイスを作成し、C モジュールをバイナリ Python モジュールに変換します
- 長所:
- パフォーマンス ?
- 短所:
- すべての型変換は C で行われます。[SIP][3] を使用すると、これが自動化される場合があります。
C モジュールを Python バイナリ モジュールに変換した方が本当に速いですか?
どちらのソリューションも、C 関数への Python コールバックの送信をサポートしていますか?
SIP は Python インターフェイスを生成するための適切なオプションですか? 他にオプションはありますか?
それらのいずれかに他の特徴はありますか?
python - Python CFFI + 7z.dll (COM) == アクセス違反 (時々)
コードを最小限のユースケースに短縮しました。
スクリプトは常に完了しますが、約 50% の確率でメモリ アクセス違反/クラッシュが発生します。
これは、Windows 7 で 64 ビットの Python 3 を使用しています。
このコードは、7zip のすべてのハンドラーをループして、それらがサポートする拡張機能を示すことになっています (スペースで区切られたリスト、空である可能性があります... VT_EMPTY ではなく、bstrVal=L"" のみ)。
厄介なことに、同等のctypes
コードは問題なく動作するようです。
python - Python CFFI で time_t フィールドを含む構造体を宣言する
CFFI を使用して、構造体を返す Python から C 関数を呼び出しています。構造体は要素で定義されtime_t
ます。Python からアクセスできるように、構造体を CFFI に宣言するにはどうすればよいですか?
たとえば、次のことを試しました(ファイルの変更時刻を取得するため):
これによりエラーが発生します。
行をコメントアウトした後にコンパイルしますが、もちろんフィールドtime_t tv_sec;
にアクセスすることはできません。tv_sec
おそらく、CFFI の C パーサーは typedef をサポートしていません。time_t
異なるプラットフォームでは型が異なる可能性があるため、実際の型に置き換えることはできません。
android - Python と Dalvik または AAF 間のネイティブ ブリッジ
同じアドレス空間で Python と Dalvik を橋渡しするプロジェクトはありますか?
ある言語で作成されたオブジェクトを別の言語でリスナーとして登録できます。また、その逆も可能です。
--
Python は CPython または PyPy です。
Dalvik は完全な Android アプリケーション フレームワークである場合もあれば、Dalvik 仮想マシンのみである場合もあり、最悪の場合、Dalvik 以外の JVM である場合もあります。
Bridge は、Python/cffi、Python/jni、ネイティブ C/C++ コード、さらには Java で記述できます。
私が理解している限り、スクリプト環境は私が望んでいることをしません。
Python--Dalvik ブリッジがまったくない場合は、フル機能の C/C++ ベースの C/C++--Dalvik ブリッジを最後の手段として有効な回答として使用します。次に、セキュリティの考慮事項を含め、実行時に一部の Android API に有効なリスナーとして送信できる C/C++ ランドで on オブジェクトをインスタンス化する例が必要です。
python - dll の読み込み時に Python CFFI モジュールが失敗する: OSError 0x7e
Windows 7、64 ビットで Python 3.3 (Anaconda ディストリビューション) を実行しています。私は Weasyprint app/library をインストールしようとしましたが、これには CFFI を含む多くの依存関係があり、互換性のあるバージョンがバイナリ配布で利用できなかったため、ソースからコンパイルする必要がありました。
weasyprint を実行すると、インポート ロード プロセス中、特に Cairo 用の GTK+ ライブラリ dll をロードするために CFFI を呼び出すときにチョークします。私が得るエラーは次のとおりです。
私が持っている環境は次のとおりです。Windows 7.1 64ビット、Python 3.3 64ビット、64ビット環境のVisual Studio 2010で(私が)コンパイルしたCFFI、およびカイロのlibcairo-2.dllも64ビットバージョンです.
私は Windows プログラマーではなく、Weasyprint を別の (Python 言語) プロジェクトで動作させたいため、この混乱を掘り下げているだけです。私はずっと前に Delphi で Windows プログラミングを少し行ったことがあります。そのため、これがどのように機能するかについては漠然としていますが、この問題を解決することはできませんでした。
python - Python CFFI 構造を辞書に変換
辞書で構造を初期化する方法があります。
変換を行う準備ができている関数はありますか?
自分で ffi.typeof("foo_t").fields を使用する必要がありますか?
これまでのところ、このコードを思いつきました:
もっと速い方法はありますか?