您的解决方案对 Cygwin 造成了最大的伤害:生成新程序。Cygwin 在这方面非常缓慢。
您可以通过使用计算机中的所有内核来加快速度,但它仍然会非常慢。
您需要一个不启动其他程序的程序来计算 RIPEMD 和。这是一个小的 Python 脚本,它在标准输入上获取 CSV,并在标准输出上输出 CSV,第二列替换为 RIPEMD 总和。
成熟的.py:
#!/usr/bin/python
import hashlib
import fileinput
import os
key = os.environ['key']
for line in fileinput.input():
# Naiive CSV reader - split on ,
col = line.rstrip().split(",")
# Compute RIPEMD on column 2
h = hashlib.new('ripemd160')
h.update(col[1]+key)
# Update column 2 with the hexdigext
col[1] = h.hexdigest().upper();
print ','.join(col)
现在你可以运行:
cat source.csv | key=a python riper.py > ziel.csv
这仍然只会使用系统的一个核心。使用所有核心 GNU Parallel 可以提供帮助。如果您的软件包系统中没有 GNU Parallel 20161222 或更新版本,它可以安装为:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
您需要安装 Perl 才能运行 GNU Parallel:
key=a
export key
parallel --pipe-part --block -1 -a source.csv -k python riper.py > ziel.csv
这将即时将 source.csv 切成每个 CPU 核心的一个块,并为每个块运行 python 脚本。在我的 8 核上,这会在 300 秒内处理一个 1 GB 的文件,其中包含 139482000 行。
如果您需要它更快,您将需要转换riper.py
为编译语言(例如 C)。