我正在为使用 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 不会导致此问题。任何有关解决此问题的帮助将不胜感激。