読み込んで辞書を作成する必要がある大きなファイルがあります。私はこれをできるだけ速くしたいと思っています。しかし、Python での私のコードは遅すぎます。問題を示す最小限の例を次に示します。
最初にいくつかの偽のデータを作成します
paste <(seq 20000000) <(seq 2 20000001) > largefile.txt
これは、それを読み込んで辞書を作成するための最小限の Python コードです。
import sys
from collections import defaultdict
fin = open(sys.argv[1])
dict = defaultdict(list)
for line in fin:
parts = line.split()
dict[parts[0]].append(parts[1])
タイミング:
time ./read.py largefile.txt
real 0m55.746s
ただし、次のようにファイル全体をより高速に読み取ることができます。
time cut -f1 largefile.txt > /dev/null
real 0m1.702s
私のCPUには8つのコアがあります.Pythonでこのプログラムを並列化して高速化することはできますか?
1 つの可能性としては、入力の大きなチャンクを読み取り、重複しない異なるサブチャンクで 8 つのプロセスを並行して実行し、メモリ内のデータから並列に辞書を作成してから、別の大きなチャンクを読み取ることです。これは何とかマルチプロセッシングを使用してPythonで可能ですか?
更新します。キーごとに値が 1 つしかなかったため、偽のデータはあまり良くありませんでした。ベターは
perl -E 'say int rand 1e7, $", int rand 1e4 for 1 .. 1e7' > largefile.txt
(大きなファイルを読み込んで辞書を作成する に関連します。)