Czy HDF5 może być niezawodnie zapisywany i odczytywany jednocześnie przez oddzielne procesy python?

9

Piszę skrypt do rejestrowania danych na żywo w czasie w jednym pliku HDF5, który zawiera mój cały zestaw danych dla tego projektu. Pracuję z Pythonem 3.6 i postanowiłem utworzyć narzędzie wiersza poleceń clickdo gromadzenia danych.

Moje obawy dotyczą tego, co się stanie, jeśli skrypt gromadzący dane zapisuje do pliku HDF5, a niedoszła aplikacja ML próbuje odczytać dane z tego samego pliku?

Rzuciłem okiem na dokumentację The HDF Group dotyczącą równoległych we / wy HDF5 , ale tak naprawdę nie wyjaśniło mi to nic.

basse
źródło

Odpowiedzi:

10

Równoległe wejścia / wyjścia HDF5 nie rozwiążą tego problemu. Ta technologia jest przeznaczona przede wszystkim do wydajności, a nie do unikania kolizji.

To, czego chcesz, to SWMR (single-writer / multiple-reader) :

Systemy akwizycji danych i modelowania komputerowego często muszą analizować i wizualizować dane podczas ich zapisywania. Na przykład nie jest niczym niezwykłym, że aplikacja generuje wyniki w połowie przebiegu, które sugerują zmianę niektórych podstawowych parametrów, dostosowanie czujników lub całkowite złomowanie przebiegu.

Aby umożliwić użytkownikom sprawdzanie takich systemów, opracowaliśmy współbieżny wzorzec dostępu do plików do odczytu / zapisu, który nazywamy SWMR (wymawiane jako pływak). SWMR jest skrótem od jednego pisarza / wielu czytników. Funkcja SWMR pozwala procesowi zapisującemu dodawać dane do pliku, podczas gdy wiele procesów czytnika odczytuje z pliku.

SWMR został po raz pierwszy uwzględniony w wersji HDF5 1.10.0 wydanej 30.03.2016

Jednoczesny dostęp do plików HDF5 - Single Writer / Multple Reader (SWMR)

Funkcja Single Writer / Multiple Reader lub SWMR umożliwia użytkownikom jednoczesne czytanie danych podczas ich zapisywania. Komunikacja między procesami i blokowanie plików nie są wymagane. Procesy mogą działać na tej samej lub na różnych platformach, o ile współużytkują wspólny system plików zgodny z POSIX.

Stephen Rauch
źródło