2017-03-06 33 views
0

我有兩個大型數據集滿散列我需要做的東西對:高效的多/多線程處理大型文件

SAMPLE1(大約15GB的大小):

0000002D9D62AEBE1E0E9DB6C4C4C7C16A163D2C 
    00000142988AFA836117B1B572FAE4713F200567 
    000001BCBC3B7C8C6E5FC59B686D3568132D218C 
    000001E4975FA18878DF5C0989024327FBE1F4DF 

SAMPLE2(大約5GB大小):

0000002D9D62AEBE1E0E9DB6C4C4C7C16A163D2C 
    00000142988AFA836117B1B572FAE4713F200567 
    000001BCBC3B7C8C6E5FC59B686D3568132D218C 
    000001E4975FA18878DF5C0989024327FBE1F4DF 

目前我想實現與這兩個文件遍歷另一組文件中像下面的目錄中的多處理:

if __name__ == '__main__': 
    hash_path = glob2.glob(r'pathtohashes*.csv') 
    sample1 = pd.read_csv(r'pathtosample1hashes.csv', names=['hash']) 
    sample2 = pd.read_csv(r'pathtosample2hashes.csv', names=['hash']) 
    for file in hash_path: 
     jobs = [] 
     p = multiprocessing.Process(compare_function(file, sample1, sample2)) 
     jobs.append(p) 
     p.start() 

該函數將文件與兩個示例文件進行比較並輸出到目錄。

我該如何提高效率?我感覺好像我的內存中有完整的數據集時有太多的進程,因爲我可以在內存中保存一個項目並引用它,但不確定如何執行。關於如何提高效率的任何提示都會有所幫助。謝謝您的幫助。

回答

1

您可能想使用標準的unix工具進行研究。如果您嘗試查找共同或缺失的項目,請注意comm(又名calm)和join命令。正是這個,它們是用C編寫的。

+0

我在我的函數中完成了比較因子,我需要能夠在我的hash_path中縮放比例爲5000個文件 – johnnyb

+1

你打算是CPU綁定還是IO綁定?考慮到大量的文件,我假設磁盤IO將成爲瓶頸。 –

+0

我假定CPU綁定。我需要將這個函數調用5000次(5000個單獨的較小文件大小),而我正在使用32gb ram的四核主機。我可能試圖以錯誤的方式去解決這個問題。該功能不僅僅是比較,它還包含許多其他項目。這個功能也是通過一個Windows主機完成的。從我的理解,我只需要能夠引用兩個大文件的一些內存。 – johnnyb