¿Se puede escribir y leer HDF5 de manera confiable de manera simultánea mediante procesos python separados?

9

Estoy escribiendo un script para grabar datos en vivo a lo largo del tiempo en un solo archivo HDF5 que incluye todo mi conjunto de datos para este proyecto. Estoy trabajando con Python 3.6 y decidí crear una herramienta de línea de comando clickpara recopilar los datos.

Mi preocupación es qué sucederá si la secuencia de comandos de recopilación de datos está escribiendo en el archivo HDF5 y la aplicación ML aún no trata de leer los datos del mismo archivo.

Eché un vistazo a la documentación del Grupo HDF sobre E / S paralelas HDF5 , pero eso realmente no me aclaró las cosas.

basse
fuente

Respuestas:

10

La E / S paralela HDF5 no resolverá este problema. Esa tecnología está destinada principalmente al rendimiento, no a la prevención de colisiones.

Lo que quieres es saber como SWMR (escritor único / lector múltiple) :

La adquisición de datos y los sistemas de modelado por computadora a menudo necesitan analizar y visualizar datos mientras se escriben. No es inusual, por ejemplo, que una aplicación produzca resultados en el medio de una ejecución que sugiera que se cambien algunos parámetros básicos, que se ajusten los sensores o que la ejecución se elimine por completo.

Para permitir que los usuarios verifiquen dichos sistemas, hemos estado desarrollando un patrón de acceso de archivos de lectura / escritura concurrente que llamamos SWMR (nadador pronunciado). SWMR es la abreviatura de escritor único / lector múltiple. La funcionalidad SWMR permite que un proceso de escritura agregue datos a un archivo mientras que múltiples procesos de lectura leen del archivo.

SWMR se incluyó por primera vez en HDF5 versión 1.10.0 lanzada el 30/03/2016

Acceso concurrente a archivos HDF5: escritor único / lector múltiple (SWMR)

La función Single Writer / Multiple Reader o SWMR permite a los usuarios leer datos simultáneamente mientras los escriben. No se requieren comunicaciones entre los procesos y el bloqueo de archivos. Los procesos pueden ejecutarse en la misma o en diferentes plataformas siempre que compartan un sistema de archivos común que sea compatible con POSIX.

Stephen Rauch
fuente