Поиск открытых файловых объектов - PullRequest
0 голосов
/ 24 января 2019

Как найти список открытых файловых объектов по снимку во времени?

Рассмотрим несколько случаев, когда файлы могут быть открыты без закрытия (через with или f.close()):

import io
import typing

buf = io.StringIO()
buf.write('memory here')  # still open

f = open('/tmp/file.tmp', 'w')
f.write('more memory')  # still open

def g() -> None:
    open('/tmp/file2.tmp', 'w')  # unclosed file
g()


def h() -> typing.TextIO:
    return open('/tmp/file3.tmp', 'w')
res = h()  # open (res.closed is False)

Я знаю, что GC в конечном итоге уничтожит объекты и закроет открытые файлы самостоятельно. Однако я заинтересован в том, чтобы вручную находить, какие открытые файлы могут использовать системные ресурсы в любой момент времени.

Один из возможных способов - посмотреть на __warningregistry__; это дефактный способ сделать такое открытие, или есть лучший маршрут?

>>> g()
>>> __warningregistry__
{'version': 0, ("unclosed file <_io.TextIOWrapper name='/tmp/file2.tmp' mode='w' encoding='UTF-8'>",
 <class 'ResourceWarning'>, 2): True}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...