Python应用程序不会快速发布文件处理程序

时间:2018-05-23 20:35:32

标签: python-3.x centos7

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(...)
            ...

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

这就是我明确控制文件句柄的意思:

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

如果这不能更快地释放你的句柄,你将不得不完全深入研究File Descriptor Operations并控制整个过程,而不是让Python在后台为你做这件事。