【发布时间】:2026-01-07 00:10:01
【问题描述】:
琐碎的问题,可能被问了几次。 我知道 Sanic 可以在 Windows 上运行(即检测缺少 uvloop,但绝不会减少后备并按下)。
我的问题是,它还会在 Windows 上异步处理请求吗......?答案似乎是肯定的——毕竟它是一个异步框架。
但是,假设我有一个只是休眠的端点,即 asyncio.sleep(10) 并返回。如果我快速连续两次调用此端点 (/) - 第一个响应会在 10 秒内返回,然后才开始处理第二个请求。所以第二个请求在大约 20 秒后返回(同步行为)。
现在,如果我做了同样的事情,即在 2 个独立端点上运行请求,例如(/i 和 /) - 它们都在请求到达后立即开始处理,第一个需要 10 秒才能响应(如预期的那样) ,然后第二个在第一个之后立即返回(异步行为)。
我有点期待请求处理程序的异步任务被转移到事件循环中,因此即使在快速连续两次调用同一端点时也具有相同的异步行为。
我错过了什么吗?
from sanic import Sanic
from sanic.response import json
import asyncio
app = Sanic("X")
@app.route("/")
async def test(request):
print("request rcvd")
await asyncio.sleep(10)
return json({"hello": "world"})
@app.route("/i")
async def test(request):
print("request /i rcvd")
await asyncio.sleep(10)
return json({"hello": "i"})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
【问题讨论】:
标签: python asynchronous python-asyncio sanic