Python und hdf5 h5py und tables
Verfasst: Dienstag 29. April 2025, 13:29
Hallo,
habe eher eine philosophische Frage zu hdf5 und Python. Ich lese aus hdf5 per h5py in eine 1D Python Liste und per tables aus Python Liste dann in andere hdf5. Das Programm tut das, was es soll. Den einfachen Code für diesen "hdf5" Teil des Programms findet man auf den Projektseiten von tables oder h5py.
Die 1D Listen sind ca. 1e06..1e08 lang, mit float. Ich lese Wert für Wert aus der hdf5 Datei bis zum Ende und danach schreibe dann wieder Wert für Wert in eine andere hdf5 Datei. Das dies nicht der effektivste Weg ist ..... verständlich, aber warum derart langsam und mit derart hoher CPU Last verbunden? Das dies effektiver per numpy & Co. geht ist mir bekannt. Ich will es einfach halten und benötige die letzten 20% Performance nicht. Komisch ist, dass der Ansatz über die hdf5 Dateien etwa um den Faktor "100" langsamer ist als per ASCII Dateiansatz. Die hdf5 Arbeit produziert hohe CPU Last (100% des Core) aber kaum Netzwerklast (ca. 10KiB/s), dauert halt ewig. Die hdf5 sind compress. Kann das die Ursache bei der inkrementellen, sequenziellen Abarbeitung sein? Wo könnte der Flaschenhalt sein?
Python 3.9 h5py 2.10.0-9 und tables 3.6.1-3.
Gruß und Dank Markus
habe eher eine philosophische Frage zu hdf5 und Python. Ich lese aus hdf5 per h5py in eine 1D Python Liste und per tables aus Python Liste dann in andere hdf5. Das Programm tut das, was es soll. Den einfachen Code für diesen "hdf5" Teil des Programms findet man auf den Projektseiten von tables oder h5py.
Die 1D Listen sind ca. 1e06..1e08 lang, mit float. Ich lese Wert für Wert aus der hdf5 Datei bis zum Ende und danach schreibe dann wieder Wert für Wert in eine andere hdf5 Datei. Das dies nicht der effektivste Weg ist ..... verständlich, aber warum derart langsam und mit derart hoher CPU Last verbunden? Das dies effektiver per numpy & Co. geht ist mir bekannt. Ich will es einfach halten und benötige die letzten 20% Performance nicht. Komisch ist, dass der Ansatz über die hdf5 Dateien etwa um den Faktor "100" langsamer ist als per ASCII Dateiansatz. Die hdf5 Arbeit produziert hohe CPU Last (100% des Core) aber kaum Netzwerklast (ca. 10KiB/s), dauert halt ewig. Die hdf5 sind compress. Kann das die Ursache bei der inkrementellen, sequenziellen Abarbeitung sein? Wo könnte der Flaschenhalt sein?
Python 3.9 h5py 2.10.0-9 und tables 3.6.1-3.
Gruß und Dank Markus