如何在不重新启动计算机的情况下强制Python代码再次读取输入文件

PyN*_*bie 1 python garbage-collection file python-2.7

我正在扫描大量文件,寻找一些标记.我开始非常有信心,一旦我完成代码,Python就不会重新读取磁盘中的实际文件.我发现这种行为很奇怪,因为我被告知我需要以我的方式构建文件访问的一个原因是刷新句柄和文件内容.但那不可能.

我正在阅读的列表中有9,568个文件路径.如果我关闭Python并重新启动计算机,则大约需要6分钟来读取文件并确定是否有正则表达式返回的内容.

但是,如果我第二次运行代码大约需要36秒.只是为了笑容,平均文件有53,000个单词.

因此,我得出结论,Python仍然可以访问它在第一次迭代中读取的文件.

我还想观察一下,我第一次这样做,我可以听到磁盘旋转(E:\ - Python在C :).E只是一个具有126 MB缓存的旋转磁盘 - 我认为缓存不足以容纳这些文件的内容.当我以后这样做时,我听不到磁盘旋转.

这是代码

import re
test_7A_re = re.compile(r'\n\s*ITEM\s*7\(*a\)*[.]*\s*-*\s*QUANT.*\n',re.IGNORECASE)
no7a = []
for path in path_list:
    path = path.strip()
    with open(path,'r') as fh:
        string = fh.read()
    items = [item for item in re.finditer(test_7A_re,string)]
    if len(items) == 0:
        no7a.append(path)
        continue
Run Code Online (Sandbox Code Playgroud)

我关心这个有很多原因,一个是我在考虑使用多处理.但如果瓶颈在读取文件,我看不出我会获得多少收益.我也认为这是一个问题,因为我担心文件被修改,并且没有最新版本的文件可用.

我正在标记这个2.7因为我不知道这种行为是否在版本中是持久的.

为了确认这种行为,我修改了我的代码以作为.py文件运行,并添加了一些时序代码.然后我重新启动了我的计算机 - 第一次运行它需要5.6分钟而第二次(没有重启)时间是36秒.两种情况下的输出都相同.

真正有趣的是,即使关闭IDLE(但不重新启动计算机),运行代码仍需要36秒.

所有这些都告诉我,第一次没有从磁盘读取文件 - 这对我来说是一个惊人的行为,但它似乎很危险.

要清楚,结果是一样的 - 我相信我已经运行的时序测试以及我没有听到磁盘旋转的事实,不知何故文件仍可供Python访问.

Han*_*ani 5

这是由Windows中的缓存引起的.它与Python无关.

为了阻止Windows缓存您的读取:

  1. 在Windows中禁用页面文件并将RAM填充至90%

  2. 使用某些工具在Windows中禁用文件缓存,就像这样.

  3. 在具有有限RAM的Windows计算机上的Linux VM上运行代码.在Linux中,您可以更好地控制缓存

  4. 使文件更大,以便它们不适合缓存