問題タブ [python-c-extension]
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 - パッケージ内の Python C 拡張機能 - 動作しませんか?
Python C 拡張機能のパッケージ化に取り組んでいますが、ここで問題が発生しています。
このsetup.pyで
問題なくビルドできますが、インストール後にモジュールをインポートできず、ImportError が発生します。
私はそれが些細なことだと確信しているので、何が欠けていますか?
前もって感謝します!
python - h5py を別の HDF5 モジュールと一緒に使用するとデッドロックが発生する
pthreads と HDF5 を使用する Python 用の C++ モジュールを作成しています。私のモジュールは H5F_ACC_EXCL モードで HDF5 ファイルを作成するため、ファイルが既に存在する場合は失敗します。この場合、HDF5 はスタック トレースを出力します。このモジュールの Python C インターフェイス関数は 1 つのスレッドで実行され、ファイルの作成は別のスレッドで行われます。通常はすべて正常に動作しますが、モジュールを使用してスクリプトに h5py をインポートすると、システムがデッドロック状態になります。ファイルを作成しようとするスレッドには、次のバックトレースがあります。
[行 #7 は、モジュール内の関数について通知します] PyTables をインポートしても、この問題は発生しないことがわかりました。この問題を解決するための助けをいただければ幸いです。
reference-counting - PyTuple_SetItem 使用時の明らかなメモリ リーク
C++ Python 拡張機能で入れ子になったタプルのセットを構築しています。ただし、参照カウントの管理に問題があります。
このメモリ リークを再現するための最小限のコード:
ここで、代わりに を に置き換えてもPyTuple_SetItem(outer, index, inner)
、Py_CLEAR(inner)
メモリ使用量は時間の経過とともに増加しません。
外側のタプルが内側のタプルへの参照を盗んでいるのは間違っていますか? メモリが再利用されない他の理由はありますか?
python - Python C API:PyEval_EvalCodeの使用
CからPythonインタープリターを使用する方法を理解しようとしていますが、に問題がありPyEval_EvalCode
ます。基本的には、Pythonコードの任意の文字列を取り込んでコンパイルし、実行して、結果を出力するC関数を作成しています。
None
問題は、結果を出力すると、式が明らかにに評価されない場合でも、常にが得られることNone
です。
コードは次のとおりです(わかりやすくするために、エラーチェックと参照カウントは削除されています)。
この関数を入力として呼び出してみたところ"5 + 5"
、が表示されNone
ました。PyEval_EvalCode
間違って使用していますか?
c++ - C++ コードの一部を Python にラップする
データを生成する C++ コードがあります。データを Python に公開したい。しかし、それは思ったほど簡単ではありません...
この C++ がバイナリにコンパイルされるとしcppcode
ます。フレームワークのセットアップ方法が複雑なため、コードは次のようにしか実行できません。
cppcode 内では、Python からアクセスしたいデータが生成されます。どういうわけかプログラムを次のように書き直すことができるかどうかはわかっています
次に、Boost Python で CppClass をラップし、インスタンスを構築し、引数を指定して実行し、生成されたデータにアクセスします。
しかし、今ではコードを次のようにしか実行できません./cppcode {command line arguments}
./cppcode
./cppcode が終了した後、そのメモリはシステムによって再収集され、Python からはもう見ることができないため、Python から呼び出すことはできません。それを回避する方法はありますか?
私は考えることができます:(1)./cppcodeにデータをディスクにダンプさせ、Pythonにそれを読み取らせます。(2) データを stdout にダンプし、python スクリプトにパイプします。しかし、どちらにしても、Python で文字列解析を行う必要があり、遅くなる可能性があります。それを回避する方法はありますか?
python - Cからの高レベルのPythonコンストラクトを使用する
threading.Condition
、およびcollections.deque
Cで記述されたモジュールからのような高レベルのPython構造を使用するためのベストプラクティスはありますか?特に:
- メソッドとメンバーのdictルックアップコストの回避
- 可能な場合は、Cにあるこれらの構成要素の一部に直接アクセスする
- 必要な機能をローカルで再実装し、標準ライブラリの他の場所からインポートしない場合
python - Monkey による Python での C 拡張へのパッチ適用
質問 972で説明した方法を使用して、psycopg で cursor() メソッドをモンキー パッチできませんでした。
psycopg2 のメソッドに型をパッチしようとしましたが、うまくいきませんでした:
C拡張だからですか?
python - C 拡張機能から PIL 画像データにアクセスする
C拡張からPIL画像のピクセルデータにアクセスする速度の点で最も効率的な方法は何ですか? それが違いを生む場合、私はそれへの読み取り専用アクセスのみが必要です。
python - Python C-API PyUnicode_FromString
私は Python C API を使用しています。Google で検索してやや不可解な回答 (問題を解決できない) を見つけましたが、このエラーを回避できないようです。
gcc -shared [...] 'pkg-config --cflags --libs python3' -fPIC [...]
(そして、はい、pkg-config 行はバッククォートにあります)でプログラムをコンパイルすると、次のエラー メッセージが生成されます。
問題のあるコードの行は単純です: PyObject *value = PyUnicode_FromString("foo") これは実際にはPython3 ドキュメントから取られています。 この例の内容は、Python インタープリターで問題なくコンパイルされ、まったく同じコマンド ライン引数を使用して実行されgcc
ます。
どんな助けでも大歓迎です!ありがとう!
python - PyErr_Set* 2 回
PyErr_Set*
例外をオーバーライドするために呼び出しても安全ですか? ドキュメントによると、エラーが発生した場合、メッセージ引数が指定されPySequence_Fast
た aが発生します。エラーが発生した後に呼び出しても安全でしょうか?TypeError
const char *
PyErr_SetObject
PySequence_Fast
例: