Приложение Python не выпускает обработчик файлов быстро - PullRequest
0 голосов
/ 23 мая 2018
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 голосов
/ 23 мая 2018

Вот что я имею в виду под явным управлением дескрипторами файла:

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 сделать это для вас в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...