Async в Django ListCreateApiView

У меня есть просто класс ListCreateApiView в Django, например:

class Test(ListCreateApiView):
    def list(self, request, *args, **kwargs):

     """ Some code which is creating excel file with openpyxl and send as response """

     return excel_file

Проблема в том, что когда пользователь отправляет запрос на получение excel_файла, он должен ждать 5-10 минут, пока файл вернется. Пользователь не может перейти по другим ссылкам, пока файл не загрузится (у меня 10k+ объектов в базе данных)

Итак, как я могу добавить сюда async? Я хочу, чтобы пока файл формируется, человек мог переходить по другим ссылкам приложения.

Большое спасибо!

Django имеет некоторые проблемы с асинхронностью, и асинхронные вызовы не помогут вам в задачах, требующих больших затрат процессора, вам лучше использовать какую-нибудь распределенную очередь задач, например celery

Это позволит вам обрабатывать такие тяжелые задачи (например, генерацию excel) в другом потоке, не прерывая основной поток django. Следуйте руководству для интеграции с django.

После установки и настройки создайте задачу и запускайте ее, когда пользователь достигает конечной точки: Например:

# tasks.py 
from celery import shared_task

@shared_task
def generate_excel(*args, **kwargs):
    ...


# views.py
from tasks import generate_excel

class Test(ListCreateApiView):
    def list(self, request, *args, **kwargs):
        generate_excel.delay()
        return Response()
Вернуться на верх