【问题标题】:do i need to use django reset_queries()我需要使用 django reset_queries()
【发布时间】:2012-03-01 21:03:26
【问题描述】:

我正在使用 django 1.3,并且我正在 Web 上下文之外(从命令行)运行脚本。
我的代码每次都会从数据库中读取 10000 个条目。
我注意到进程的内存使用量随着时间的推移越来越大。
我的代码是:

def getData(startIndex,chunkSize):
    dataList =Mydata.objects.filter(update_date__isnull = True)[startIndex:startIndex+chunkSize]
    return list(dataList)

if __name__ == '__main__':
   chunkSize = 10000
   startIndex = 0
   dataSize = Mydata.objects.filter(update_date__isnull = True).count()
   while startIndex < dataSize:
       dataList = getData(startIndex,chunkSize)
       startIndex += chunkSize
       do_stuff(dataList)

我的问题是:我需要使用reset_queries() 和或connection.close()
这是内存使用量增加的原因吗?

【问题讨论】:

  • 只是为了检查:你有DEBUG = False吗?
  • 绝对是python进程在吃更多内存吗?您能单步执行脚本并查看哪些行导致内存增加
  • 是的,它是占用内存的 python 进程。但它可能不是查询部分,它可能是 do_stuff 部分,我只是想确保不需要 reset_queries()跨度>
  • 另外,尝试使用queryset.iterator() 而不是list(queryset) 来明确地一次只读取一条记录。

标签: python django orm django-models memory-leaks


【解决方案1】:

我会先在您的查询中使用onlydefer 方法。这两个用于仅检索您实际需要的字段,而不是所有字段。您的查询会稍微快一些并且消耗更少的内存,因为不会从数据库中获取不需要的字段。

【讨论】:

    猜你喜欢
    • 2020-11-08
    • 2018-04-19
    • 2021-11-12
    • 2016-04-03
    • 2020-08-23
    • 2022-01-10
    • 2019-09-09
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多