2017-02-18 18 views
5

Tôi đang cố gắng ra Sanic và chạy thế giới ứng dụng Xin chào trừ tôi đã thêm một giấc ngủ trong xử lý yêu cầu:yêu cầu Non-blocking trong khuôn khổ Sanic

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

Tuy nhiên, khi tôi chạy này, nó vẫn khối trên mỗi yêu cầu:

$ 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] 

Trong hai thiết bị đầu cuối riêng biệt:

$ 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 

tôi nghĩ ý tưởng của Sanic đang có thể xử lý tất cả các yêu cầu không đồng bộ và không bị chặn cho đến khi hoàn thành xử lý yêu cầu tiếp theo. Am i thiếu cái gì ở đây?

Trả lời

9

Thay time.sleep(5) với:

await asyncio.sleep(5) 
+0

Ahhh, duh, tất cả mọi thứ trong phạm vi xử lý phải non-blocking là tốt. Cảm ơn! – mart1n