0

pthreads と HDF5 を使用する Python 用の C++ モジュールを作成しています。私のモジュールは H5F_ACC_EXCL モードで HDF5 ファイルを作成するため、ファイルが既に存在する場合は失敗します。この場合、HDF5 はスタック トレースを出力します。このモジュールの Python C インターフェイス関数は 1 つのスレッドで実行され、ファイルの作成は別のスレッドで行われます。通常はすべて正常に動作しますが、モジュールを使用してスクリプトに h5py をインポートすると、システムがデッドロック状態になります。ファイルを作成しようとするスレッドには、次のバックトレースがあります。

#0  sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:86
#1  0x00000000004aed31 in PyThread_acquire_lock ()
#2  0x0000000000495c74 in PyEval_RestoreThread ()
#3  0x00000000004fd83a in PyGILState_Ensure ()
#4  0x00007ffff02ca907 in __pyx_f_4h5py_3h5e_err_callback (__pyx_v_client_data=0xc5c470) at h5py/h5e.c:2045
#5  0x00007ffff5be1d62 in H5E_dump_api_stack () from /usr/lib/libhdf5.so.6
#6  0x00007ffff5be6a98 in H5Fcreate () from /usr/lib/libhdf5.so.6
#7  0x00007fffecb0cc46 in HDF5WriterBase::openFile (this=0x7fffe47efd68) at HDF5WriterBase.cpp:143

[行 #7 は、モジュール内の関数について通知します] PyTables をインポートしても、この問題は発生しないことがわかりました。この問題を解決するための助けをいただければ幸いです。

4

1 に答える 1

2

これは関係ないかもしれませんが、h5py と libjhdf5 を使用しようとしたときに奇妙な問題が発生しました (java コードは jpype を使用して呼び出されていました)。バグの詳細は次のとおりです: https://bugs.launchpad.net/openquake/+bug/882637

これは直接的には役に立たないかもしれませんが、この特定のバグは特定のバージョンの libhdf5 を使用した場合にのみ再現可能であったことを指摘しておきます。デフォルトのh5py、libjhdf、およびlibhdfパッケージを使用して、Ubuntu 11.04でこの問題が発生しました。私の同僚の 1 人は、別のディストリビューション (および別のパッケージ) を使用していましたが、この問題はありませんでした。

簡単に言えば、使用しているOS、バージョン、およびパッケージは何ですか? パッケージにバグがある可能性があります。エラーを再現するためのコード サンプルも役立ちます。

于 2012-02-28T23:36:11.673 に答える