В pickle module documentation есть фрагмент кода примера:продолжительность питон объекта файла в списке аргументов
reader = pickle.load(open('save.p', 'rb'))
, который при первом чтении выглядел он будет выделять системы дескриптор файла, прочитать его содержимое, а затем «утечка» открытого дескриптора, поскольку нет доступной ручки для вызова close()
. Это заставило меня задуматься, есть ли скрытая магия, которая позаботится об этом случае.
Дайвинг в источник, я нашел в модулях/_fileio.c, что дескрипторы файлов закрыты файловым_деаллоком() деструктором, что привело к реальному вопросу.
Какова продолжительность файлового объекта, используемого в приведенном выше примере кода? После того, как этот оператор выполнит, действительно ли объект станет неучтенным и, следовательно, будет ли fd подвержен реальному вызову close(2)
в какой-то будущей сборке мусора? Если это так, это пример хорошей практики, или не следует рассчитывать на выпуск fd, тем самым рискуя исчерпать таблицу дескриптора ядра для каждого процесса?
спасибо большое; вы были правы, я имел в виду «использовать», а не «возвращать» и редактировать, чтобы исправить. – msw