Я пытаюсь обслуживать длительные запросы с помощью gunicorn и его асинхронных рабочих, но я не могу найти примеры, которые я могу заставить работать. Я использовал пример здесь, но добавил фальшивую задержку (сон в течение 5 секунд) перед возвратом ответа:
def app(environ, start_response):
data = "Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
time.sleep(5)
return iter([data])
Затем я запускаю gunicorn так:
gunicorn -w 4 myapp:app -k gevent
Когда я открываю две вкладки браузера и ввожу http://127.0.0.1:8000/
в обе из них и отправляю запросы почти одновременно, кажется, что запросы обрабатываются последовательно - один возвращается через 5 секунд, а другой возвращается через a еще 5 секунд.
Q. Я предполагаю, что сон не является дружественным? Но есть 4 воркера, и поэтому, даже если тип воркера был «синхронным», два воркера должны обрабатывать два запроса одновременно?