8

我正在尝试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 的想法是能够异步处理所有请求,并且在一个完成处理下一个请求之前不会阻塞。我在这里错过了什么吗?

4

1 回答 1

15

替换time.sleep(5)为:

 await asyncio.sleep(5)
于 2017-02-18T18:33:46.877 回答