Обход таймаута 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, но я не хочу делать ничего, что повлияет на другие конечные точки.