Я запускаю приложение фляги с работниками gunicorn и gthread - я запускаю приложение с gunicorn --config config/gunicorn.py api_intent:make_app()
и мой файл config/gunicorn.py
выглядит так:
bind = ['0.0.0.0:80']
worker_class = "gthread"
__all__ = ['bind']
Одна из моих конечных точек колб делает сложные вызовы базы данных, для выполнения которых требуются минуты. Иногда я вижу следующую ошибку на стороне клиента: Remote end closed connection without response
. Тем не менее, я также обнаружил, что если я выполняю последующий идентичный вызов, то на клиентской стороне не возникает ошибка, и я нахожу в журналах сервера, что дорогостоящие вызовы базы данных занимают меньше времени (хотя и порядка нескольких минут), вероятно, потому что данные, о которых заботится конечная точка, заносятся в память.
Я смотрел на документы о оружейном оружии и, в частности, на вариант timeout
, но мне сложно понять последствия изменения времени ожидания для асинхронных рабочих. Насколько я понимаю, с помощью gthread
рабочие обеспечивают пульс некоторого главного процесса, и мне не ясно, почему значение по умолчанию, равное 30 секундам для этого значения, лишь иногда заставляет сервер закрывать соединение с клиентом. Может ли быть так, что если для одного вызова БД требуется> 30 секунд выполнения, работник gthread будет считаться мертвым?
Как я могу правильно дать команду gunicorn ждать дольше, прежде чем закрывать соединения? Могу ли я настроить это для конечной точки?