Gunicorn не соблюдает тайм-аут при использовании UvicornWorker - PullRequest
0 голосов
/ 06 апреля 2020

Я устанавливаю проверку тайм-аута, поэтому я сделал и конечную точку:

@app.get("/tc", status_code=200)
def timeout_check():
    time.sleep(500)
    return "NOT OK"

Я использую docker image tiangolo/uvicorn-gunicorn-fastapi:python3.7 и мою команду для запуска сервера:

CMD ["gunicorn","--log-level","debug","--keep-alive","15", "--reload", "-b", "0.0.0.0:8080", "--timeout", "15", "--worker-class=uvicorn.workers.UvicornH11Worker", "--workers=10", "myapp.main:app"]

Я ожидаю, что конечная точка выйдет из строя через 15 секунд, но это не так. Похоже, тайм-аут не соблюдается. Любое исправление для этого?

1 Ответ

0 голосов
/ 14 апреля 2020

Asyn c работники ведут себя не так, как Syn c работники:

  • В син c работники, работник будет заблокирован при выполнении запроса, поэтому если если запрос дольше тайм-аута, рабочий будет убит, и запрос тоже.
  • В asyn c работников, работник не блокируется и реагирует на выполнение других запросов, даже если запрос занимает много времени. ie Рабочий тайм-аут и тайм-аут запроса в этом случае разные вещи.

В настоящее время нет параметров тайм-аута запроса для uvicorn.

для более подробной информации: https://github.com/benoitc/gunicorn/issues/1493

...