ディレクトリにあるすべてのファイルをリストして読み込み、同時にファイルに存在するレコードの総数をカウントするプログラムがあります。Pythonのプールクラスを使用したテキストファイルレコード数
私は以下のコードを実行しているときに、複数のファイルからのレコードのカウントも並行しているので、カウントがチャンクになるワーカースレッド名のリストを取得します。私は
File1.Txt Total_Recordcount
...
Filen.txt Total_Recordcount
UPDATE のようなファイルの合計記録数が、私は解決策を持って、貼り付け得ることができるように
import multiprocessing as mp
import time
import os
path = '/home/vaibhav/Desktop/Input_python'
def process_line(f):
print(mp.current_process())
#print("process id = " , os.getpid(f))
print(sum(1 for line in f))
for filename in os.listdir(path):
print(filename)
if __name__ == "__main__":
with open('/home/vaibhav/Desktop/Input_python/'+ filename, "r+") as source_file:
# chunk the work into batches
p = mp.Pool()
results = p.map(process_line, source_file)
start_time = time.time()
print("My program took", time.time() - start_time, "to run")
電流出力
<ForkProcess(ForkPoolWorker-54, started daemon)>
73
<ForkProcess(ForkPoolWorker-55, started daemon)>
<ForkProcess(ForkPoolWorker-56, started daemon)>
<ForkProcess(ForkPoolWorker-53, started daemon)>
73
1
<ForkProcess(ForkPoolWorker-53, started daemon)>
79
<ForkProcess(ForkPoolWorker-54, started daemon)>
<ForkProcess(ForkPoolWorker-56, started daemon)>
<ForkProcess(ForkPoolWorker-55, started daemon)>
79
77
77
は、道の周りにありますコメントセクションの答え。
この場合、複数のファイルを同時に読み取るためにマルチプロセッシングモジュールを使用することはできませんか? – codaholic
元のコードは一度に1つのファイルのみを処理しますが、正しいですか?一度に複数のファイルを処理したい場合は、 'pool.map(countlines、source_files)'のようにすることができます。つまり、各スレッドに一度に1つのファイルを与えます。これにより、プログラムが高速化するかどうかを予測することは困難です。これは、お使いのコンピュータによって異なります。 –
私のプログラムは、一度に複数のファイルを処理しています。私はpool.map()を使用しています。アウトプットをチェックインすることもできます。複数のフォークプロセスも存在します。 – codaholic