質問

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

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

この問題を回避する方法は誰でもできます。不要になったメモリを返すようにPILを強制することにより、

私のコードは単純に次のようになります:

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

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

アドバイスをありがとう!

マーティン

役に立ちましたか?

解決

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

する必要があるのは、 iterator()メソッド。だから:

all = Picture.objects.all().iterator()
for i in all:
    i.image.generate_thumbnails()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top