Метод prefetch_related в Django асинхронно блокирует ответ HTTP
Блокирует ли метод prefetch_related в Django поток, возвращающий http-ответ, каким-то асинхронным способом?
def test_view(request):
rows = SomeModel.objects.prefetch_related('some_m2m_field')
num_rows = len(rows)
print(num_rows)
return JsonResponse({'num_rows':num_rows})
Я знаю, что правильный способ получить количество строк - .count(), я использую len() здесь как простой способ принудительной оценки queryset.
На самом деле, меня даже не интересует количество строк, я просто делаю это в качестве упрощения, чтобы нам не пришлось вникать в мою бизнес-логику.
Итак, вот в чем дело, при работе на БД с ~25k строк приведенный выше код выведет число на терминал всего за секунду или две, но для возврата JSON в браузер потребуется более минуты!
Когда вы удаляете prefetch_related, все происходит хорошо и быстро, но мне нужен этот prefetch_related для моей реальной бизнес-логики, которая здесь опущена для простоты.
Я понимаю, что предварительная выборка сделает запрос медленнее, но здесь должно происходить что-то еще, верно? Если бы это был просто медленный запрос, оператор печати занял бы столько же времени, сколько и JsonResponse?