Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:对象引用保持在异常状态_Python_Django - Fatal编程技术网

Python Django:对象引用保持在异常状态

Python Django:对象引用保持在异常状态,python,django,Python,Django,当我在Django应用程序中引发异常时,我有一种奇怪的行为。请查看此代码段(我删除了所有不必要的代码): 这是EmsDatabase类: class EmsDatabase: def __init__(self): pass def __del__(self): print('>>>>>>>>>>>>>>>> DEL') 运行这个函数(显然是通过一

当我在Django应用程序中引发异常时,我有一种奇怪的行为。请查看此代码段(我删除了所有不必要的代码):

这是EmsDatabase类:

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')