HDF5 Python - правильный способ обработки операций чтения из нескольких процессов? - PullRequest
1 голос
/ 13 марта 2020

У меня есть генератор изображений, который читает партии трехмерных тензоров из файла HDF5 (через h5py), и он использует многопроцессорную библиотеку Python (унаследованную от Keras Sequence).

Я хотел бы понять если я делаю это правильно, и если я могу улучшить это.

У меня есть метод __getitem__, вызванный несколькими процессами для N итераций, и каждый раз, когда этот метод вызывается, я открываю файл HDF5 и читаю пакет данных для заданного набора индексов и немедленно закрыть файл (через менеджер контекста).

def get_dataset_items(self, dataset: str, indices: np.ndarray) -> np.ndarray:
        """Get an h5py dataset items.

        Arguments
        ---------
        dataset : str
            The dataset key.
        indices : ndarray, 
            The list of current batch indices.

        Returns
        -------
        np.ndarray
            An batch of elements.
        """
        with h5.File(self.src, 'r') as file:
            return file[dataset][indices]

Похоже, что нет проблем с этим подходом, но я действительно не уверен. Я прочитал, что мы можем ожидать странные вещи и поврежденные данные при чтении файла из нескольких процессов.

Я вижу, что есть интерфейс MPI и режим SWMR.

Могу ли я воспользоваться одним из них функции ?

...