2012-02-09 20 views
4

私はdjango 1.3を使用しています。私は(コマンドラインから)Webコンテキストの外でスクリプトを実行しています。
私のコードは毎回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

+0

はい、DEBUGは偽です – yossi

+0

それは間違いなくより多くのメモリを食べているPythonのプロセスですか?あなたはスクリプトを実行して、どの行がメモリハイキングを引き起こしているかを調べることができます – second

答えて

1

クエリでonlyまたはdeferメソッドを使用することから始めます。これらの2つは、すべてのフィールドではなく、実際に必要なフィールドのみを取得するために使用されます。必要なフィールドはデータベースからフェッチされないため、クエリはわずかに高速になり、消費メモリも少なくなります。

関連する問題