Django:对象引用保持异常

时间:2018-08-03 11:58:53

标签: python django

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

@csrf_exempt
def main(request):

  ems_db = EmsDatabase()
  # raise AssertionError

  return HttpResponse('OK\n', content_type='text/plain')

这是EmsDatabase类:

class EmsDatabase:

    def __init__(self):
        pass

    def __del__(self):
        print('>>>>>>>>>>>>>>>> DEL')

运行此函数(显然是通过适当的http调用),EmsDatabase类被实例化并正确地进行了垃圾回收;我在Django服务器日志中看到了打印输出。

但是,如果我取消了raise AssertionError行的注释,则没有任何打印输出,并且该对象仍然存在。只是修改源文件以触发服务器重新加载,会使该对象失去对自身的引用并被垃圾回收(出现打印行)。

通过Lighttpd + Gunicorn运行Django也会发生同样的事情。

为什么Django(v2.0.7,python 3.6,Linux)为什么保留对我的对象的引用,或更可能是对main()函数的框架的引用?我该怎么办?

0 个答案:

没有答案