我有几个想要阅读的日志文件。不失一般性,假设日志文件处理如下:
def process(infilepath):
answer = 0
with open (infilepath) as infile:
for line in infile:
if line.startswith(someStr):
answer += 1
return answer
因为我有很多日志文件,所以我想在这个问题上抛出多处理(我的第一个错误:我可能应该使用多线程;有人请告诉我为什么)
这样做时,我突然想到,任何形式的并行处理在这里都应该是无效的,因为我的 HDD 上只有一个读取头,因此只能读取一个文件。时间。事实上,在这种推理下,由于可能同时请求来自不同文件的行,读取头可能需要不时地显着移动,导致多进程方法比串行方法慢。所以我决定回到单个进程来读取我的日志文件。
有趣的是,我注意到小文件(<= 40KB)确实得到了加速,并且只有大文件(>= 445MB)才注意到预期的减速。
这让我相信 python 可能会以块的形式读取文件,其大小超过了我一次请求的一行。
Q1:那么底层的文件读取机制是什么?
Q2:优化从传统硬盘读取文件的最佳方法是什么?
技术规格:
- python3.3
- 5400rpm 传统硬盘
- Mac OSX 10.9.2(小牛)