Django:对象引用保持异常

2024-05-23 18:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在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服务器日志中看到了打印输出

但是如果我取消对raiseassertionerror行的注释,我就没有打印输出,对象仍然是活动的;只要修改源文件以触发服务器重新加载,就会使对象失去对自身的引用并被垃圾收集(打印行出现)

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

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


Tags: 对象django函数代码self服务器应用程序main