2017-10-14 33 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集約型タスクでは使用できません。

あるドライブから別のドライブにファイルをコピーすると、2つのプロセスで時間が短縮される場合があります。また、マウントされたネットワークドライブ(NAS)でも動作します。

+0

ありがとうございました。 –

関連する問題