【问题标题】:Django MemoryError Importing Lots of Data from XML FilesDjango MemoryError 从 XML 文件导入大量数据
【发布时间】:2012-02-22 20:51:53
【问题描述】:

我正在从 XML 文件中导入记录,它正在消耗内存。我已经浏览了创建和删除所有元素和子元素以清除内存的 XML ElementTree,但它仍然只是堆积起来。

我终于找到了解决方案,并希望在 SO 中为将来可能遇到相同问题的其他人提供此解决方案。当我偶然发现这个时,我正在网上搜索答案:Django MemoryError - How to work with large databases。我的 MemoryError 不是因为我的 Queryset 的大小,因为它们不是那么大,但我想我还是会试一试。对于对象上的任何循环,我将所有 objects.all() 更改为 objects.all().iterator()。这并没有起到太大的作用,因为我只循环了大约三组不同的对象,没有一个是巨大的。我不情愿地在 settings.py 中将DEBUG=True 转换为DEBUG=False,它几乎将内存使用量减少到零!来自 Django 文档:

"同样重要的是要记住,当打开 DEBUG 运行时,Django 会记住它执行的每个 SQL 查询。这在您调试时很有用,但它会迅速消耗生产服务器上的内存.

这不是生产服务器,它是我的开发服务器。那么,由于所有执行的查询都被存储了,它们在哪里以及如何获取它们?如果它们对调试很有帮助,为什么它们不更容易获得?

【问题讨论】:

    标签: django memory django-settings


    【解决方案1】:

    显示查询的方法如下:

    from django.db import connection
    print connection.queries
    

    欲了解更多信息,请参阅this faq entry

    【讨论】:

    • 太棒了,伙计。这很酷。感谢您的快速回复。
    【解决方案2】:

    您还可以通过 Django Logging 记录 sql 查询,至少在 Django 1.3.x 中是这样

    https://docs.djangoproject.com/en/dev/topics/logging/

    【讨论】:

    • 谢谢,席德。我没想到在那里做。
    • @Furbeenator DEBUG 设置为 True 将导致 django-logging 无论如何都要记录所有 SQL 查询。您可能不必明确地这样做。
    猜你喜欢
    • 2017-12-02
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2012-06-03
    • 1970-01-01
    • 2017-09-07
    相关资源
    最近更新 更多