2

私のdjangoアプリのsorl-thumbnailを使用して、約40kの画像ごとに4つのサムネイルを一括生成しようとしています。ImageWithThumbnailsFieldFile を使用してすべての django オブジェクトを反復処理し、その generate_thumbnails() 関数を呼び出します。

これは問題なく動作しますが、数百回の反復の後、メモリが不足し、ループが「メモリ エラー」でクラッシュします。sorl-thumbnail は PIL を使用してサムを生成するため、PIL はサムの生成時に使用したすべてのメモリを返さないようです。

この問題を回避する方法はありますか?たとえば、PILに不要になったメモリを強制的に返させることはできますか?

私のコードは次のようになります。

all = Picture.objects.all()
for i in all:
    i.image.generate_thumbnails()

関数 generate-thumbnail は、129 行目から始まります。

アドバイスをよろしくお願いします!

マーティン

4

1 に答える 1

4

あなたの問題は、Django がクエリセットの結果をループするときにキャッシュする方法に関連しています。Django はすべてのオブジェクトをメモリに保持するため、次に同じクエリセットを反復処理するときに、すべてのデータを取得するためにデータベースに再度アクセスする必要はありません。

あなたがする必要があるのはiterator()メソッドを使うことです。そう:

all = Picture.objects.all().iterator()
for i in all:
    i.image.generate_thumbnails()
于 2009-11-26T19:35:07.050 に答える