2

首先介绍一下我的问题:我的一个(复杂)对象在被销毁时需要清理。原因是它有一个文档列表,这些文档最终必须发送到 couchdb 实例(保存该列表是为了执行批量写入)。如果对象被删除,则必须将文档列表发送到服务器。

将列表发送到服务器是一个复杂的过程:在实际发送之前,您需要获取要更新的文档的当前版本。文档可能已经存在于 couchdb 中,可以被删除等。Couchdb 在这方面有点复杂。我只是提到这一点,以表明我不能仅仅为了解决我的问题而重新实现此功能(见下文)。

在这个过程中,我依赖一些全局对象来执行一些操作:具体来说,我有一个模块log对象,就像我在所有代码中一样,来执行日志记录。

所有这些动作都是从__del__我班级的方法触发的。但是当我的对象被删除时,我收到错误消息:

Exception AttributeError: "'NoneType' object has no attribute 'WARNING'" in <bound method xxx.__del__ of <yyy.xxx object at 0xd08c48c>> ignored 

显然,在log删除对象时,模块对象不存在。我的问题是:

  1. 为什么不再定义全局对象(在这种情况下为模块对象)?
  2. python按什么顺序删除全局对象?我可以更改此顺序吗?我可以将对象标记为“最后删除”吗?
  3. 我能做些什么来防止这种行为?

如果这不能改变,我就有大麻烦了。相同的模式在我的代码中无处不在,我的类依赖于一个模块log对象来执行日志记录,或者任何其他模块对象。我的大多数类都没有实现__del__方法,但有些实现了。

4

0 回答 0