我有一个 Django 应用程序,它将大量数据加载到 sqlite3 数据库文件中。
我们正在谈论数百万个条目,这些条目输入到一个函数中,在执行的某个时刻会抛出异常:
File "/root/codebase/lib/python2.6/site-packages/Django-1.3.1-py2.6.egg/django/db/transaction.py", line 219, in inner
self.__exit__(*sys.exc_info())
File "/root/codebase/lib/python2.6/site-packages/Django-1.3.1-py2.6.egg/django/db/transaction.py", line 207, in __exit__
self.exiting(exc_value, self.using)
File "/root/codebase/lib/python2.6/site-packages/Django-1.3.1-py2.6.egg/django/db/transaction.py", line 286, in exiting
leave_transaction_management(using=using)
File "/root/codebase/lib/python2.6/site-packages/Django-1.3.1-py2.6.egg/django/db/transaction.py", line 56, in leave_transaction_management
connection.leave_transaction_management()
File "/root/codebase/lib/python2.6/site-packages/Django-1.3.1-py2.6.egg/django/db/backends/__init__.py", line 114, in leave_transaction_management
self.rollback()
MemoryError
我检查了我的函数,它没有泄漏内存。这里还能做什么?
from
https://docs.djangoproject.com/en/dev/faq/models/#why-is-django-leaking-memory https://docs.djangoproject.com/en/dev/faq/models/#why-is-django-leaking-memory
Django 不知道会泄漏内存。如果您发现 Django 进程正在分配越来越多的内存,并且没有释放内存的迹象,请检查以确保您的 DEBUG 设置设置为 False。如果 DEBUG 为 True,则 Django 会保存其执行的每个 SQL 语句的副本。
(查询保存在 django.db.connection.queries 中。请参阅如何查看 Django 正在运行的原始 SQL 查询?。)
要解决此问题,请将 DEBUG 设置为 False。
如果您需要在函数中的任何时候手动清除查询列表,只需调用reset_queries(),如下所示:
from django import db
db.reset_queries()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)