Как найти список открытых файловых объектов по снимку во времени?
Рассмотрим несколько случаев, когда файлы могут быть открыты без закрытия (через 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}