代码之家  ›  专栏  ›  技术社区  ›  user6369958

Django:对象引用保持异常

  •  0
  • user6369958  · 技术社区  · 6 年前

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

    @csrf_exempt
    def main(request):
    
      ems_db = EmsDatabase()
      # raise AssertionError
    
      return HttpResponse('OK\n', content_type='text/plain')
    

    class EmsDatabase:
    
        def __init__(self):
            pass
    
        def __del__(self):
            print('>>>>>>>>>>>>>>>> DEL')
    

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

    但是,如果我取消对raise AssertionError行的注释,那么我没有得到打印输出,并且该对象仍处于活动状态;只要修改源文件以触发服务器重新加载,就会使该对象失去对自身的引用,并被垃圾回收(出现打印行)。

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

    0 回复  |  直到 6 年前