0

我正在为使用 pthreads 和 HDF5 的 Python 编写 C++ 模块。我的模块在 H5F_ACC_EXCL 模式下创建 HDF5 文件,以便在文件已经存在时失败。在这种情况下,HDF5 会打印堆栈跟踪。该模块的 python C 接口函数在一个线程中执行,文件创建在另一个线程中进行。通常一切正常,但如果我使用我的模块在脚本中导入 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 时遇到了一些奇怪的问题(使用 jpype 调用了 java 代码)。以下是该错误的一些详细信息:https ://bugs.launchpad.net/openquake/+bug/882637

这可能没有直接帮助,但我会指出,这个特定的错误只能使用特定版本的 libhdf5 重现。我在使用默认 h5py、libjhdf 和 libhdf 包的 Ubuntu 11.04 上遇到了这个问题。我的一位同事正在使用不同的发行版(和不同的软件包),他没有这个问题。

长话短说,您使用的是什么操作系统、版本和软件包?包可能有错误。重现错误的代码示例也会有所帮助。

于 2012-02-28T23:36:11.673 回答