2017-10-12 4 views
0

QuerySet内のすべてのオブジェクトを反復処理します。しかし、QuerySetは何百万ものオブジェクトであっても、何百万ものオブジェクトと一致します。だから、私が反復を開始しようとすると、CPU使用率が100%になり、すべてのメモリがいっぱいになり、物事がクラッシュします。最初の項目が返される前に、この問題が発生した:キャッシュを事前に設定せずにDjango QuerySetを反復する

bts = Backtrace.objects.all() 
for bt in bts: 
    print bt 

私は、個々のオブジェクトを求めることができ、それはすぐに戻ります:

bts = Backtrace.objects.all() 
print(bts[5]) 

しかし、すべてのオブジェクトの数を取得することは、単に、上記のようにクラッシュするので、私はできますどのくらいの数のオブジェクトがあるのか​​わからないので、このメソッドを使って繰り返しません。

結果全体がプリキャッシュされることなく反復処理する方法はありますか?

答えて

3

まず、クエリセットがevaluated(データベースにヒットする)であることを理解していることを確認してください。

もちろん、1つのアプローチはクエリーセットになります。これは問題外である場合

あなたが使用できるいくつかの回避策は、あなたのニーズに応じて、あります

これは、より理論的なレベルでこの問題に取り組もうとしているnice articleです。

関連する問題