python - 判断对象是否已经完成
问题描述
Python 3.4 中发生的GC 更改的一个影响是,被 gc 跟踪的对象只会__del__
调用一次它的方法,即使第一次__del__
调用会复活对象:
>>> class Foo(object):
... def __del__(self):
... print('__del__')
... global x
... x = self
...
>>> x = Foo()
>>> del x
__del__
>>> del x
>>>
(未跟踪的对象当前的行为不同,因为它们没有指示已完成状态的标志。您可以通过插入__slots__ = ()
上面的类定义来看到这一点。我不确定这是错误还是已知和接受行为差异。)
出于调试目的,能够确定对象是否已__del__
调用其方法将很有用。一种选择是在其中插入一个设置指示标志的行,但这需要提前准备,并且对于用C 编写的对象(例如生成器)__del__
可能是不可能的。__del__
是否可以在不修改其方法的情况下确定对象是否已完成__del__
?
解决方案
在 Python 3.9 中,可以使用gc.is_finalized(obj)
.
推荐阅读
- python-3.x - Pandas groupby.pct_change() 仅返回 0 和 nan
- javascript - 为什么这些方块在 setInterval 内只翻译一次而不是多次?
- amazon-web-services - 使用 AWS ECR 公共库运行 Docker
- ios - 如何解决颤振上的 pod install 错误?
- python - 如何发布我刚刚保存的带有 tweepy 的图片?
- google-cloud-platform - Flink-BigTable - 任何连接器?
- excel - Excel SUMPRODUCT 和动态文本条件
- r - 闪亮 - 带小时的滑块输入
- python - python tkinter“in”运算符不起作用
- javascript - 尝试与 React .js App 同时运行我的 node.js 服务器并得到:'ERR_MODULE_NOT_FOUND'