我有一个大文件,我需要读入并从中制作字典。我希望这尽可能快。但是我在 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 中并行化这个程序以加快速度?
一种可能性可能是读取输入的大块,然后在不同的非重叠子块上并行运行 8 个进程,从内存中的数据并行创建字典,然后读取另一个大块。这在python中是否可能以某种方式使用多处理?
更新。假数据不是很好,因为每个键只有一个值。更好的是
perl -E 'say int rand 1e7, $", int rand 1e4 for 1 .. 1e7' > largefile.txt
(与读取大文件并制作字典有关。)