2017-10-14 35 views
0

我在文件夾中有很多文件,所以我認爲我應該使用多進程, 然後我使用多進程來讀取文件夾中的txt文件, 但我比較瞭如果我使用多進程或不, 我發現如果我不使用池更快。我不知道爲什麼, 所以什麼情況下應該使用游泳池讀取文件(大文件?)關於使用多處理讀取文件

using Pool 
time:0.5836s 
not using Pool 
time:0.0076s 

代碼,

import pandas as pd 
from multiprocessing import Pool 
import glob2,os,time 

class PandasReadFile: 

    def __init__(self): 
     print('123') 

    def readFilePool(self,path): 
     n,t=0,time.time() 
     print(t) 
     pp = Pool(processes=1) 

     # here is using pool 
     df = pd.concat(pp.map(self.read_csv, glob2.iglob(os.path.join(path, "*.txt")))) 
     # not using pool 
     # df = pd.concat(map(pd.read_csv, glob2.iglob(os.path.join(path, "*.txt")))) 
     t = time.time() - t 
     print('%.4fs' % (t)) 
     print(df) 

    @staticmethod 
    def read_csv(filename): 
     return pd.read_csv(filename) 

if __name__ == '__main__': 
    p = PandasReadFile() 
    p.readFilePool('D:/') 
+1

你正在做的實際工作只需要0.0076秒!在單獨的進程中創建額外的Python解釋器的開銷不止於此。你有一個真正的用例需要更長的時間嗎?你可以測試嗎? –

+0

測試我只是把10個文件放在文件夾中, 如果我有大量的文件,多處理速度比單處理還快嗎? 如果是,我應該創建多少個進程?謝謝。 –

+0

I/O綁定操作不需要訪問全局解釋器鎖。多進程。這裏的進程會更快。 –

回答

0

,只要你想你可以生成儘可能多的進程但是由於你在同一個硬盤上工作,你不會減少時間。更糟糕的是:你會失去時間。

對於CPU密集型任務,您可以使用多處理,而不是用於IO密集型任務。

如果您將文件從一個驅動器複製到另一個驅動器,則可以減少兩個進程的時間。它也可以與安裝的網絡驅動器(NAS)一起使用。

+0

謝謝你的答案。 –