object.__del__(self) 是刷新日志类的最合适位置吗?

发布于 2024-12-08 07:00:13 字数 504 浏览 2 评论 0原文

我的 Python 脚本有一个自定义日志记录类,其中包含一个 flush() 方法,该方法 print() 是列表的内容。

我想在特殊的 __del__() 方法中包含 flush() ,以防程序在没有刷新日志的情况下结束。然而文档中的注释指出:

[...] 当调用 del() 来响应删除模块时(例如,当程序执行完成时),由 del< 引用的其他全局变量/strong>() 方法可能已经被删除或正在被拆除(例如导入机器关闭)。

有人会推荐一种不同的方法吗?如果是,为什么?

I have a custom logging class for my Python script with a flush() method which print()s the contents of a list.

I would like to include flush() in the special __del__() method in case the program ends without the log being flushed. However a note in the documentation states:

[...] when del() is invoked in response to a module being deleted (e.g., when execution of the program is done), other globals referenced by the del() method may already have been deleted or in the process of being torn down (e.g. the import machinery shutting down).

Would anyone recommend a different way of doing this, and if so, why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒绊 2024-12-15 07:00:13

您可能想考虑使此记录器成为 上下文管理器< /a>.在异常终止的情况下,这仍然不会刷新,但很少有东西会刷新。但是即使在正常终止的情况下,也可能不会在对象上调用 __del__ 。

使用 with 语句时,记录器可能是不太适合的事物之一,因为它们非常全局,因此不确定上下文管理器是否合适。

You might want to look into making this logger a context manager. That still will not flush in the case of abnormal termination, but few things will. But __del__ might not be called on objects even in normal termination.

Loggers might be one of the things that doesn't fit well when using the with statement, as they are quite global, so it's not sure context manager is a good fit.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文