Как избежать тайм-аута при создании большого CSV с помощью python?

Для проекта мне нужно реализовать экспорт CSV из большой базы данных. Мой проект Django размещен на Azure, и каждый раз я получаю ошибку таймаута...

Думаю, мне нужно реализовать асинхронную функцию или что-то в этом роде.

Я пробовал async_to_sync и sync_to_async, запуск с сервера Daphne, StreamingHttpResponse...

Вот код:

class Echo:
    """An object that implements just the write method of the file-like
    interface.
    """

    def write(self, value):
        """Write the value by returning it, instead of storing in a buffer."""
        return value


@api_view(['POST'])
@permission_classes((permissions.IsAuthenticated,))
def export_csv(request):
    try:
        # long task
        first_item, second_item, third_item = my_function(request.data)

        csv_tab = []
        csv_tab.append(build_headers())

        # long task
        for item in first_item:
            csv_tab.extend(build_lines(item, second_item, third_item))

        pseudo_buffer = Echo()

        writer = csv.writer(pseudo_buffer, delimiter=';')

        response = StreamingHttpResponse(
            (writer.writerow(line) for line in csv_tab),
            content_type='text/csv',
            headers={
                'Content-Disposition': 'attachment; filename="somefilename.csv"'},
        )

        return response
    except Exception as identifier:
        LOGGER.exception(identifier)
        current = {
            'state': "failure",
            'reason': "server error",
        }
        print(identifier)
        return HttpResponse(json.dumps(current), status=500)

Если ваш запрос занимает много времени, вам следует использовать библиотеку фоновых задач, например celery.

В зависимости от варианта использования, вы можете отправить результат по электронной почте после вычисления или сгенерировать некий идентификатор или токен и перенаправить пользователя на промежуточную страницу, которая указывает, продолжается ли обработка или результаты готовы для загрузки.

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