擅长:python、mysql、java
<p>我认为使用mmap模块来处理内存映射文件
也许能帮你节省两次时间。我发现它太小了或者
非常大的块不会节省很多,但是您可以尝试查看最佳大小。你知道吗</p>
<pre><code>import mmap
def binFileRead(chunk): # the reading of binary file length size
with open(filename, "rb") as f:
for n in range(int(length/chunk)):
dd=f.read(chunk)
def mapFileRead(chunk): # the reading of memory mapped file length size
with open(filename, "r+b") as f:
mapf = mmap.mmap(f.fileno(), length, access=mmap.ACCESS_READ)
for n in range(int(length/chunk)):
offset=n*chunk
dd=mapf[offset:offset+chunk]
# dd=mapf.read(chunk)
mapf.close()
</code></pre>
<p>我对两个功能都计时:</p>
<pre><code>timeit("mapFileRead({})".format(n),"from __main__ import mapFileRead", number=1))
timeit("binFileRead({})".format(n),"from __main__ import binFileRead", number=1))
chunk=4096:
mapFileRead 0.00837285185687
binFileRead 0.0148429479166
</code></pre>
<p>编辑时间:
我认为,一个索引访问文件,而读取是允许使用线程并行读取多个记录。如果你有兴趣,我可以写一个例子。你知道吗</p>