Обход таймаута gunicorn worker для определенной конечной точки

У меня есть приложение Django (3.2.4), работающее на Gunicorn (20.1.0), и у этого приложения есть одна тяжелая конечная точка. Эта конечная точка возвращает отчет в формате csv, который может быть очень большим:

def _stream_serialized_data():
    paginator = Paginator(MyModel.objects.filter(**filter), 5000)
    for page in paginator.page_range:
        yield from MySerializer(paginator.page(page).object_list, many=True).data

renderer = CSVStreamingRenderer()
return StreamingHttpResponse(
    renderer.render(_stream_serialized_data(), renderer_context={"header": MySerializer.Meta.fields}),
    content_type="text/csv",
    headers={"Content-Disposition": 'attachment; filename="report.csv"'},
)

Проблема заключается в том, что загрузка отчета может быть прервана по таймауту gunicorn worker, несмотря на то, что загрузка начинается немедленно и задержка между чанками очень мала.

Есть ли способ сообщить gunicorn, что этот рабочий в порядке? Может быть, вызвать какую-нибудь функцию из цикла _stream_serialized_data, чтобы сбросить таймаут.

Я уже нашел предложения увеличить таймаут и использовать gevent, но я не хочу делать ничего, что повлияет на другие конечные точки.

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