Python Django:对象引用保持在异常状态
当我在Django应用程序中引发异常时,我有一种奇怪的行为。请查看此代码段(我删除了所有不必要的代码): 这是EmsDatabase类:Python Django:对象引用保持在异常状态,python,django,Python,Django,当我在Django应用程序中引发异常时,我有一种奇怪的行为。请查看此代码段(我删除了所有不必要的代码): 这是EmsDatabase类: class EmsDatabase: def __init__(self): pass def __del__(self): print('>>>>>>>>>>>>>>>> DEL') 运行这个函数(显然是通过一
class EmsDatabase:
def __init__(self):
pass
def __del__(self):
print('>>>>>>>>>>>>>>>> DEL')
运行这个函数(显然是通过一个正确的http调用)EmsDatabase类被实例化并正确地进行垃圾收集;我在Django服务器日志中看到了打印输出
但是,如果我取消对raiseassertionError行的注释,我就没有打印输出,对象仍然是活动的;只要修改源文件以触发服务器重新加载,对象就会丢失对自身的引用并被垃圾收集(打印行出现)
通过Lighttpd+Gunicorn运行Django也会发生同样的情况
为什么Django(v2.0.7,Python3.6,Linux)保留对我的对象的引用,或者更可能是对main()函数框架的引用?我能做什么?这很有道理。对象本身不会立即删除:如果不再有元素引用该对象,则该对象是要删除的候选对象。但有些系统会等到内存量增加(要求操作系统提供一个新的内存“页面”),因此首先要扔掉对象,以防止出现这种情况。这可能会有所帮助:CPython标准解释器会在对象的引用计数为零时释放对象,正如Schwobasegl链接中正确说明的那样。没有延迟的垃圾收集。我很确定,当函数被异常中断时,Django正在保留(无用的?)引用。
class EmsDatabase:
def __init__(self):
pass
def __del__(self):
print('>>>>>>>>>>>>>>>> DEL')