简单查询导致Django中的内存泄漏

时间:2019-04-04 18:05:05

标签: python django memory-leaks

我在一家拥有大型数据库的公司中工作,我想对其执行一些更新查询,但是这似乎会导致巨大的内存泄漏 查询如下

Select EventTime, EventType , CUSTOMER_NAME AS FolderID  FROM Table1, Table2 Where Table1.FolderID = Table2.fid;

我是在django的交互式外壳中写的

我什至尝试使用

c= CallLog.objects.all()
for i in c:
   i.cdate = pytz.utc.localize(datetime.datetime.strptime(i.fixed_date, "%y-%m-%d %H:%M"))
   i.save()

但是它不起作用,您是否知道如何检测

的来源

我正在处理的数据集大约是27毫米

fixed_date是计算所得的属性

3 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

from django.core.paginator import Paginator

p = Paginator(CallLog.objects.all().only('cdate'), 2000)
for page in range(1, p.num_pages + 1):
    for i in p.page(page).object_list:
        i.cdate = pytz.utc.localize(datetime.datetime.strptime(i.fixed_date, "%y-%m-%d %H:%M"))
        i.save()

切片查询集不会仅将内存中的所有对象加载到一个子集,而是会在命中数据库之前为SQL查询添加限制和偏移量。

答案 1 :(得分:0)

您可以尝试分批迭代查询集;请参见.iterator()方法。看看是否有任何改善

for obj in CallLog.objects.all():
    obj.cdate = pytz.utc.localize(
        datetime.datetime.strptime(obj.fixed_date, "%y-%m-%d %H:%M"))
    obj.save()

这是我发现的一个相关answer,但它已经有几年历史了。

答案 2 :(得分:0)

尝试将其分成小块(因为您只有4GB的内存)

places_for_dynamo.py| sculptures_upload.py| google_places.py| sculptures_upload.py

在必要时,我通常使用字符或数字(在1,2,3,4等中输入的ID)