h5py вызывает тупик при использовании вместе с другим модулем HDF5 - PullRequest
0 голосов
/ 29 февраля 2012

Я пишу модуль C ++ для Python, который использует pthreads и HDF5.Мой модуль создает файлы HDF5 в режиме H5F_ACC_EXCL, поэтому происходит сбой, когда файл уже присутствует.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 не вызывает этой проблемы.Будем весьма благодарны за любую помощь в устранении этой проблемы.

1 Ответ

2 голосов
/ 29 февраля 2012

Возможно, это не связано, но у меня были некоторые странные проблемы при попытке использовать h5py и libjhdf5 (код java вызывался с использованием jpype). Вот некоторые детали ошибки: https://bugs.launchpad.net/openquake/+bug/882637

Это может быть не совсем полезным, но я укажу, что эта конкретная ошибка воспроизводилась только с использованием определенной версии libhdf5. У меня была эта проблема в Ubuntu 11.04 с использованием пакетов h5py по умолчанию, libjhdf и libhdf. Один из моих коллег использовал другой дистрибутив (и другой пакет), и у него не было этой проблемы.

Короче говоря, какую ОС, версию и пакеты вы используете? Возможно, в пакете есть ошибка. Примеры кода для воспроизведения ошибки также будут полезны.

...