
我最终在程序的入口点包装了内置文件对象。我发现我没有关闭记录仪。
import ioimport sysimport builtinsimport tracebackfrom functools import wrapsdef opener(old_open): @wraps(old_open) def tracking_open(*args, **kw): file = old_open(*args, **kw) old_close = file.close @wraps(old_close) def close(): old_close() open_files.remove(file) file.close = close file.stack = traceback.extract_stack() open_files.add(file) return file return tracking_opendef print_open_files(): print(f'### {len(open_files)} OPEN FILES: [{", ".join(f.name for f in open_files)}]', file=sys.stderr) for file in open_files: print(f'Open file {file.name}:n{"".join(traceback.format_list(file.stack))}', file=sys.stderr)open_files = set()io.open = opener(io.open)builtins.open = opener(builtins.open)欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)