当我在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()函数框架的引用?我能做什么
目前没有回答
相关问题 更多 >
编程相关推荐