2017-10-12 5 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 (데이터베이스에 부딪 힐 때)을 이해했는지 확인하십시오.

물론 한 가지 방법은 쿼리 세트입니다. 이 문제를 벗어나면

당신이 사용할 수있는 몇 가지 해결 방법은 사용자의 필요에 따라,이 있습니다 :

다음은이 문제를보다 이론적 인 수준으로 다루려고 시도한 멋진 article입니다.