Метод 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?

Вернуться на верх