【问题标题】:h5py causing deadlock when used together with another HDF5 moduleh5py 与另一个 HDF5 模块一起使用时导致死锁
【发布时间】:2012-02-28 20:09:33
【问题描述】:

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

【问题讨论】:

    标签: python pthreads hdf5 python-c-extension gil


    【解决方案1】:

    这可能不相关,但我在尝试使用 h5py 和 libjhdf5 时遇到了一些奇怪的问题(使用 jpype 调用了 java 代码)。以下是该错误的一些详细信息:https://bugs.launchpad.net/openquake/+bug/882637

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

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

    【讨论】:

    • 我认为这是同一个问题。我在另一个安装上尝试过它,它工作正常。我当前的系统信息如下:Ubuntu 11.04,内核:2.6.38-13-generic x86_64,hdf5:1.8.4(本地构建),h5py 1.3.1(通过pip构建)。
    猜你喜欢
    • 2021-11-09
    • 2023-01-08
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多