2017-06-22 285 views
0

我有〜1000個獨立的HDF5文件存儲在磁盤上。每個處理器只需要大約10ms就可以加載到內存中,所以我想知道什麼是並行加載它們的最佳方式,以便我能夠實現線性性能提升。Python - 並行讀取hdf5文件

我已經嘗試了多處理,但是由於設置進程的開銷,最終結果會比連續加載它們慢。我研究過Cython,特別是prange,但是無法優化它以加快速度。任何指針將不勝感激!

+0

我不認爲並行處理會加快您的進程,因爲它只會加快計算時間,而不會加快磁盤訪問時間。不過,我會建議通過將文件存儲在zip文件中來獲得性能。 –

+0

如果從磁盤讀取所有10毫秒的數據,那麼您認爲可以首先加快流程的速度?如果你正在使用100%的帶寬,我想沒有什麼可以做的,對吧? – JohanL

+0

是不是可以使用Cython並釋放GIL進行多線程?難道理論上不允許IO邊界任務的並行處理並提高性能? – Michael

回答

0

這聽起來像是一個mapreduce的工作,但如果你只有一臺機器,那麼我會建議使用管道。編寫一個腳本來打開文件並將數據打印到標準輸出,然後在另一個腳本中從標準輸入和流程中讀取數據。您將script1重定向到script2。

# script1.py 
FILES_TO_READ = ... 
for filename in FILES_TO_READ: 
    # open the file 
    # do work 
    # print data 

# script2.py 
while True: 
    line = input() 
    # do work 

$> ./script1.py | ./script2.py