首页 > 解决方案 > Python 应用程序不会快速释放文件处理程序

问题描述

def write_data_to_disk(file_list):
    for file_name in file_list: # size of file_list is around 20K
        with open(file_name, 'a') as f:
            f.write(...)
            ...

该应用程序有一个名为 as 的函数,write_data_to_disk它将文件名列表作为输入,并将一些增量数据写入每个文件。该函数将被应用程序重复调用。

如果我运行这个应用程序的多个实例,每个实例都给定唯一的文件名列表,系统就会遇到问题。根据我的初步调查,似乎所有启动的应用程序都用尽了操作系统中所有可用的文件处理程序,并导致其他正在运行的进程失败。如您所见,在每个单独的应用程序中,它只打开一个要写入的文件,然后立即关闭它并准备下一次写入。根据我的测试结果,如果我同时运行该应用程序的六个或八个实例,我会遇到问题。以前有没有人有类似的经验,解决这个问题的正确解决方案是什么?

谢谢

标签: python-3.xcentos7

解决方案


这是我在显式控制文件句柄下的意思:

import os

def write_data_to_disk(file_list):
    for file_name in file_list:
        with open(file_name, 'a') as f:
            f.write(...)
            f.flush()  # force the buffer flush
            os.fsync(f.fileno())  # force the OS buffer sync (disk write in most cases)
            # let __exit__() close the handler; an explicit f.close() might be faster, tho

如果这不能更快地释放您的句柄,您将不得不完全深入研究文件描述符操作并控制整个过程,而不是让 Python 在后台为您完成。


推荐阅读