2017-06-22 6 views
0

Ich habe ~ 1000 separate HDF5-Dateien auf der Festplatte gespeichert. Jeder dauert nur etwa 10ms, um in den Speicher geladen zu werden, also habe ich mich gefragt, wie man sie am besten parallel laden kann, so dass ich einen linearen Leistungsschub bekomme.Python - lesen hdf5 Dateien parallel

Ich habe versucht, Multiprocessing, aber das ist langsamer als nur seriell laden sie in wegen der Overhead der Einrichtung der Prozesse. Ich habe Cython genauer untersucht, aber es hat Probleme, es zu optimieren, um es schneller zu machen. Irgendwelche Hinweise würden geschätzt werden!

+0

Ich glaube nicht, dass die parallele Verarbeitung Ihren Prozess beschleunigen wird, da es nur die Rechenzeit und nicht die Zugriffszeit beschleunigt. Ich würde jedoch vorschlagen, dass Sie versuchen, Leistung zu erzielen, indem Sie die Dateien stattdessen in einer Zip-Datei speichern. –

+0

Wenn alle 10 ms vom Datenträger gelesen werden, was lässt Sie glauben, dass es möglich ist, den Prozess von vornherein zu beschleunigen? Wenn Sie 100% der Bandbreite verwenden, denke ich, dass es nichts zu tun gibt, oder? – JohanL

+0

ist es nicht möglich, Cython zu verwenden und die GIL für Multithreading freizugeben? Könnte das nicht theoretisch eine parallele Verarbeitung für IO-gebundene Aufgaben ermöglichen und die Leistung erhöhen? – Michael

Antwort

0

Das klingt wie ein Job für mapreduce, aber wenn Sie nur eine Maschine haben, würde ich empfehlen, Pipes zu verwenden. Schreiben Sie ein Skript, um die Dateien zu öffnen, und drucken Sie die Daten nach stdout, dann lesen Sie in einem anderen Skript die Daten von stdin und process. Sie leiten script1 in script2 um.