2012-02-09 61 views
4

我使用的是django 1.3,我正在Web上下文之外運行腳本(從命令行)。
我的代碼每次都從db讀取10000條記錄。
我注意到這個過程的內存使用量隨着時間的推移變得越來越大。
我的代碼是:我需要使用django reset_queries()

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()
並且這是在內存使用量增加的原因?

+0

只是爲了檢查:你有'DEBUG = False'? – second 2012-02-09 14:02:07

+0

是的,DEBUG是假的 – yossi 2012-02-09 14:12:18

+0

它是否正在吃更多的內存的Python進程?你可以逐句通過腳本,看看哪些行導致內存上漲 – second 2012-02-09 14:22:44

回答

1

我會從查詢中開始使用onlydefer方法。這兩個用於僅檢索實際需要的字段,而不是所有字段。您的查詢速度會稍微快一點,並佔用較少的內存,因爲不會從數據庫中獲取不需要的字段。