Fastapi Python -Code -Ausführungsgeschwindigkeit, die durch den Einsatz mit Uvicorn gegen Gunicorn betroffen ist

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Fastapi Python -Code -Ausführungsgeschwindigkeit, die durch den Einsatz mit Uvicorn gegen Gunicorn betroffen ist

by Anonymous » 22 Aug 2025, 10:07

Ich habe eine Fastapi -App geschrieben. Und jetzt denke ich darüber nach, es einzusetzen, aber ich scheine seltsame unerwartete Leistungsprobleme zu bekommen, die davon abhängen, ob ich Uvicorn gegen Gunicorn verwende. Insbesondere der gesamte Code (sogar die Standardbibliothek reiner Python -Code) scheint langsamer zu werden, wenn ich Gunicorn verwende. Für Performance -Debugging habe ich eine kleine App geschrieben, die dies demonstriert: < /p>

Code: Select all

import asyncio, time
from fastapi import FastAPI, Path
from datetime import datetime

app = FastAPI()

@app.get("/delay/{delay1}/{delay2}")
async def get_delay(
delay1: float = Path(..., title="Nonblocking time taken to respond"),
delay2: float = Path(..., title="Blocking time taken to respond"),
):
total_start_time = datetime.now()
times = []
for i in range(100):
start_time = datetime.now()
await asyncio.sleep(delay1)
time.sleep(delay2)
times.append(str(datetime.now()-start_time))
return {"delays":[delay1,delay2],"total_time_taken":str(datetime.now()-total_start_time),"times":times}
< /code>
Ausführen der Fastapi -Appi mit: < /p>
gunicorn api.performance_test:app -b localhost:8001 -k uvicorn.workers.UvicornWorker --workers 1
Der Resonok -Körper von A Get to http: // localhost: 8001/delay/0.0/0.0 ist konsequent so etwas wie:

Code: Select all

{
"delays": [
0.0,
0.0
],
"total_time_taken": "0:00:00.057946",
"times": [
"0:00:00.000323",
...smilar values omitted for brevity...
"0:00:00.000274"
]
}
< /code>
jedoch mit: < /p>
uvicorn api.performance_test:app --port 8001
< /code>
Ich erhalte rund umsahe Zeiten wie diese < /p>
{
"delays": [
0.0,
0.0
],
"total_time_taken": "0:00:00.002630",
"times": [
"0:00:00.000037",
...snip...
"0:00:00.000020"
]
}
Der Unterschied wird noch stärker, wenn ich auf das Asyncio -Sleep (Delay1) Anweisung wartet. Python 3.8.2 unter OS X 11.2.3 mit einem Intel i7 -Prozessor.

Code: Select all

fastapi==0.65.1
gunicorn==20.1.0
uvicorn==0.13.4

Top