Мне нужно прочитать очень большой файл H5 с диска в память как можно быстрее.
В настоящее время я пытаюсь прочитать его, используя несколько потоков через многопроцессорную библиотеку, но продолжаю получать ошибки, связанные с тем, что файлы H5 не могут быть прочитаны одновременно.
Вот небольшой фрагмент, демонстрирующий подход, который я использую:
import multiprocessing
import h5py
import numpy
f = h5py.File('/path/to/dataset.h5', 'r')
data = f['/Internal/Path/Dataset'] # this is just to get how big axis 0 is
dataset = numpy.zeros((300, 720, 1280)) # what to read the data into
def process_wrapper(frameCounter):
dataset[frameCounter] = f['/Internal/Path/Dataset']
#init objects
cores = multiprocessing.cpu_count()
pool = multiprocessing.Pool(cores)
jobs = []
#create jobs
frameCounter = 0
for frame in range(0, data.shape[0]): # iterate through axis 0 of data
jobs.append( pool.apply_async(process_wrapper,([frameCounter])) )
frameCounter += 1
#wait for all jobs to finish
for job in jobs:
job.get()
#clean up
pool.close()
Я ищу или обходной путь, который позволит мне использовать несколько считывателей в файле H5, или другой подход, который все же позволил бы мне читать его быстрее. Спасибо