考虑这个 python 程序:
import sys
lc = 0
for line in open(sys.argv[1]):
lc = lc + 1
print lc, sys.argv[1]
在我的 6GB 文本文件上运行它,它在大约 2 分钟内完成。
问题:有可能走得更快吗?
请注意:
wc -l myfile.txt
所以,我怀疑我的问题的答案只是一个简单的“不”。
另请注意,我的真实程序正在做一些比仅仅计算行数更有趣的事情,所以请给出一个通用的答案,不是行计数技巧(比如在文件中保留行计数元数据)
PS:我将这个问题标记为“linux”,因为我只对特定于 linux 的答案感兴趣。如果您有答案,请随意给出操作系统不可知论者甚至其他操作系统的答案。
最佳答案
用硬件解决问题。
正如 gs 所指出的,您的瓶颈是硬盘传输速率。所以,不,你不能使用更好的算法来改善你的时间,但你可以购买更快的硬盘。
编辑 gs 的另一个好点;你也可以使用 RAID配置以提高速度。这可以通过 hardware 来完成或软件(例如 OS X 、 Linux 、 Windows Server 等)。
控制方程
(转账金额)/(转账率)=(转账时间)
(6000 MB)/(60 MB/s) = 100 秒
(6000 MB)/(125 MB/s) = 48 秒
硬件解决方案
The ioDrive Duo据说是企业环境中最快的解决方案,并且“将于 2009 年 4 月推出”。
或者您可以查看 WD Velociraptor 硬盘(10,000 rpm)。
另外,我听说 Seagate Cheetah是一个不错的选择(15,000 rpm,持续传输速率为 125MB/s)。
关于python - 是否可以加速 python IO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849058/