Неблокирующие запросы в фреймворке Sanic

Я пробую Sanic и запускаю приложение Hello World, но добавляю сон в обработчик запросов:

@app.route("/")
async def test(request):
    time.sleep(5)
    return json({"hello": "world"})

Однако, когда я запускаю это, он по-прежнему блокируется при каждом запросе:

$ python app.py
2017-02-18 19:15:22,242: INFO: Goin' Fast @ http://0.0.0.0:8000
2017-02-18 19:15:22,245: INFO: Starting worker [15867]

В двух отдельных терминалах:

$ time curl http://0.0.0.0:8000/
{"hello":"world"}
real    0m5.009s
user    0m0.003s
sys     0m0.001s

$ time curl http://0.0.0.0:8000/
{"hello":"world"}
real    0m9.459s
user    0m0.000s
sys     0m0.004s

Я думал, что идея Sanic заключается в том, чтобы обрабатывать все запросы асинхронно и не блокировать, пока один не завершит обработку следующего. Я что-то упустил здесь?


person mart1n    schedule 18.02.2017    source источник


Ответы (1)


Замените time.sleep(5) на:

 await asyncio.sleep(5)
person Udi    schedule 18.02.2017
comment
Аааа, все в обработчике тоже должно быть неблокирующим. Спасибо! - person mart1n; 18.02.2017