【发布时间】:2021-09-17 13:54:49
【问题描述】:
这是我的琐碎fastapi应用:
from datetime import datetime
import asyncio
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/delayed")
async def get_delayed():
started = datetime.now()
print(f"Starting at: {started}")
await asyncio.sleep(10)
ended = datetime.now()
print(f"Ending at: {ended}")
return {"started": f"{started}", "ended": f"{ended}"}
if __name__ == "__main__":
uvicorn.run("fastapitest.main:app", host="0.0.0.0", port=8000, reload=True, workers=2)
当我连续两次调用它时,第二个函数中的代码在第一个请求完成之前不会开始执行,产生如下输出:
Starting at: 2021-09-17 14:52:40.317915
Ending at: 2021-09-17 14:52:50.321557
INFO: 127.0.0.1:58539 - "GET /delayed HTTP/1.1" 200 OK
Starting at: 2021-09-17 14:52:50.328359
Ending at: 2021-09-17 14:53:00.333032
INFO: 127.0.0.1:58539 - "GET /delayed HTTP/1.1" 200 OK
鉴于该函数标记为 async 并且我是 awaiting sleep,我希望得到不同的输出,例如:
Starting at: ...
Starting at: ...
Ending at: ...
INFO: 127.0.0.1:58539 - "GET /delayed HTTP/1.1" 200 OK
Ending at: ...
INFO: 127.0.0.1:58539 - "GET /delayed HTTP/1.1" 200 OK
[用于通话 我刚刚在 localhost:8000/delayed 上打开了 2 个浏览器选项卡]
我错过了什么?
【问题讨论】:
-
你是怎么打电话的?
-
@alex_noname 我刚刚在localhost:8000/delayed打开了两个浏览器标签
-
!!这应该更容易,但我看到了痛苦。开箱即用,文档上没有提示。
标签: python python-asyncio fastapi