使用像下面這樣的“正常”協程,結果是首先列印所有請求,然后在大約 5 秒后列印所有回應:
import asyncio
async def request():
print('request')
await asyncio.sleep(5)
print('response')
loop = asyncio.get_event_loop()
tasks = [
loop.create_task(request())
for i in range(30)
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
我想在 FastApi 中復制相同的行為,所以我有這樣的端點:
import asyncio
from fastapi import FastAPI
app = FastAPI()
@app.post("/")
async def root():
print('request')
await asyncio.sleep(5)
return 'OK'
我用來自前端的多個請求轟炸它,如下所示:
const url = 'http://localhost:8000'
const data = [1, 2, 3]
const options = {
method: 'POST',
headers: new Headers({'content-type': 'application/json'}),
body: JSON.stringify({data}),
mode: 'no-cors',
}
for (let i=0; i<30; i ) {
fetch(url, options)
}
但是,在終端中我可以清楚地看到 FastAPI 一次只接受 6 個請求,為它們回傳回應,然后再接受另外 6 個:
request
request
request
request
request
request
←[32mINFO←[0m: 127.0.0.1:63491 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:58337 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:50479 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:60499 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:56990 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:56107 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
request
request
request
request
request
request
←[32mINFO←[0m: 127.0.0.1:58337 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:63491 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:60499 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:56990 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:56107 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
←[32mINFO←[0m: 127.0.0.1:50479 - "←[1mPOST / HTTP/1.1←[0m" ←[32m200 OK←[0m
等等。
這是因為某些 FastAPI/uvicorn 設定或限制嗎?
可以增加數量嗎,這樣做是否合理?
uj5u.com熱心網友回復:
您在瀏覽器中執行此操作,因此您有效地達到了瀏覽器中的并行請求限制。它與 API 本身無關。如果你想測驗你的API的性能,使用的是已被設計為做到這一點的工具-比如siege,httperf,ab或類似的工具。
從記錄瀏覽器中當前并行請求限制的答案中:
Firefox 3 : 6
...
Edge: 6
Chrome: 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/344604.html
