我正在为Python编写一个使用pthreads和HDF5的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不会导致这个问题。任何有关解决此问题的帮助都将不胜感激。
答案 0 :(得分:2)
这可能没有关系,但在尝试使用h5py和libjhdf5(使用jpype调用java代码)时遇到了一些奇怪的问题。以下是该错误的一些细节:https://bugs.launchpad.net/openquake/+bug/882637
这可能没有直接帮助,但我会指出,这个特定的错误只能使用特定版本的libhdf5重现。我使用默认的h5py,libjhdf和libhdf包在Ubuntu 11.04上遇到了这个问题。我的一位同事正在使用不同的发行版(和不同的包),他没有这个问题。
长话短说,您使用的操作系统,版本和软件包是什么?软件包有可能存在错误。重现错误的代码示例也会有所帮助。