Lev*_*evi 6 python python-asyncio fastapi
这是我的小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)
Run Code Online (Sandbox Code Playgroud)
当我连续两次调用它时,第二个函数中的代码直到第一个请求完成后才开始执行,产生如下输出:
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
Run Code Online (Sandbox Code Playgroud)
鉴于该函数已被标记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
Run Code Online (Sandbox Code Playgroud)
[对于通话,我刚刚在 localhost:8000/delayed 打开了 2 个浏览器选项卡]
我缺少什么?
它按预期并行工作 - 这只是浏览器的事情:chrome 在检测不同选项卡中请求的相同端点时,将等待第一个完全解析以检查结果是否可以缓存。
相反,如果您在 shell 中放置来自不同进程的 3 个 http 请求,则结果将符合预期:
content-length: 77
content-type: application/json
date: Fri, 17 Sep 2021 19:51:39 GMT
server: uvicorn
{
"ended": "2021-09-17 16:51:49.956629",
"started": "2021-09-17 16:51:39.955487"
}
HTTP/1.1 200 OK
content-length: 77
content-type: application/json
date: Fri, 17 Sep 2021 19:51:39 GMT
server: uvicorn
{
"ended": "2021-09-17 16:51:49.961173",
"started": "2021-09-17 16:51:39.960850"
}
HTTP/1.1 200 OK
content-length: 77
content-type: application/json
date: Fri, 17 Sep 2021 19:51:39 GMT
server: uvicorn
{
"ended": "2021-09-17 16:51:49.964156",
"started": "2021-09-17 16:51:39.963510"
}
Run Code Online (Sandbox Code Playgroud)
在每个浏览器选项卡的 URL 上添加随机(即使未使用)查询参数都将取消尝试缓存行为。
| 归档时间: |
|
| 查看次数: |
4494 次 |
| 最近记录: |