h5py读取h5文件报错:Unable to open object (bad heap free list)

前言

最近在复现一篇论文的代码时发现了一个致命问题,研究了一天,终于还是破解了。网上找了半天,一个类似的解决方案都没有,记录一下。

错误出现的代码位置:

self.feature_app_file = h5py.File(self.opt.input_app_feature, 'r', driver='core')

错误信息

Traceback (most recent call last):
  File "train.py", line 259, in <module>
    train(opt)
  File "train.py", line 133, in train
    data = loader.get_batch('train')
  File "/data/czw/code/SMAN-main/dataloader.py", line 248, in get_batch
    tmp_fc, tmp_att, tmp_c3d_feature, tmp_token, ix, tmp_wrapped = self._prefetch_process[split].get()
  File "/data/czw/code/SMAN-main/dataloader.py", line 117, in get
    tmp = self.split_loader.next()
  File "/data/anaconda3/envs/video_czw/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 819, in __next__
    return self._process_data(data)
  File "/data/anaconda3/envs/video_czw/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 846, in _process_data
    data.reraise()
  File "/data/anaconda3/envs/video_czw/lib/python3.6/site-packages/torch/_utils.py", line 369, in reraise
    raise self.exc_type(msg)
KeyError: Caught KeyError in DataLoader worker process 0.
Original Traceback (most recent call last):
  File "/data/anaconda3/envs/video_czw/lib/python3.6/site-packages/torch/utils/data/_utils/worker.py", line 178, in _worker_loop
    data = fetcher.fetch(index)
  File "/data/anaconda3/envs/video_czw/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/data/anaconda3/envs/video_czw/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/data/czw/code/SMAN-main/dataloader.py", line 231, in __getitem__
    att_feat = np.array(self.feature_box_file[(self.info['images'][ix]['id'])])
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "/data/anaconda3/envs/video_czw/lib/python3.6/site-packages/h5py/_hl/group.py", line 288, in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5py/h5o.pyx", line 190, in h5py.h5o.open
KeyError: 'Unable to open object (bad heap free list)

反正这个bad heap free list错误是第一次见,也是第一次解决。

解决方案

其实很简单,就是把后面的 driver='core'删了,就可以了。

self.feature_app_file = h5py.File(self.opt.input_app_feature, 'r')

完结,撒花~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于 Kingbase 数据库运行中 "unhandled event loop exception java heap space",这通常是由于 Java 堆空间不足引起的。Java 堆是 Java 虚拟机(JVM)用来存储对象实例的内存区域,当堆空间不足时,就会抛出该误。 要解决这个问题,你可以尝试以下几种方法: 1. 增加 JVM 堆空间:通过调整 JVM 的启动参数来增加堆空间。具体而言,你可以使用 `-Xms` 和 `-Xmx` 参数来分别设置 JVM 的初始堆大小和最大堆大小。例如,可以使用 `-Xms512m -Xmx1024m` 来将初始堆大小设置为 512MB,最大堆大小设置为 1024MB。根据你的实际情况,可以适当调整这些值。 2. 优化数据库查询:检查数据库查询语句是否存在性能问题,例如是否存在大量的全表扫描或者没有正确使用索引。优化查询可以减少内存消耗,降低堆空间的压力。 3. 减少数据量:如果你的数据库中存储了大量数据,考虑清理或归档一些不再需要的数据,以减少内存消耗。 4. 检查代码中的资源泄漏:确保在代码中正确地释放数据库连接、释放查询结果集和关闭文件流等资源,避免资源泄漏导致内存占用不断增加。 5. 升级数据库或使用最新的驱动程序:检查是否存在已知的数据库版本或驱动程序问题,尝试升级数据库或使用最新版本的驱动程序来修复可能的 Bug。 如果上述方法无法解决问题,建议你查阅 Kingbase 数据库的官方文档或联系 Kingbase 的技术支持团队以获取更多帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值