@@ -43,26 +43,14 @@ async def get_item(item_id: int):
4343 }
4444
4545
46- def bench_fastapi (loops ):
47- with socket .socket (socket .AF_INET , socket .SOCK_STREAM ) as s :
48- s .bind ((HOST , 0 ))
49- s .listen (1 )
50- port = s .getsockname ()[1 ]
51-
52- config = uvicorn .Config (app , host = HOST , port = port , log_level = "error" )
53- server = uvicorn .Server (config )
54-
46+ def bench_fastapi (loops , url ):
5547 async def run_benchmark ():
56- server_task = asyncio .create_task (server .serve ())
57- while not server .started :
58- await asyncio .sleep (0.01 )
59-
6048 async with httpx .AsyncClient () as client :
6149 t0 = pyperf .perf_counter ()
6250
6351 for i in range (loops ):
6452 tasks = [
65- client .get (f"http:// { HOST } : { port } /items/{ i } " )
53+ client .get (f"{ url } /items/{ i } " )
6654 for _ in range (CONCURRENCY )
6755 ]
6856 responses = await asyncio .gather (* tasks )
@@ -72,16 +60,30 @@ async def run_benchmark():
7260 assert data ["id" ] == i
7361 assert "tags" in data
7462
75- elapsed = pyperf .perf_counter () - t0
76-
77- server .should_exit = True
78- await server_task
79- return elapsed
63+ return pyperf .perf_counter () - t0
8064
8165 return asyncio .run (run_benchmark ())
8266
8367
8468if __name__ == "__main__" :
69+ import threading
70+
71+ with socket .socket (socket .AF_INET , socket .SOCK_STREAM ) as s :
72+ s .bind ((HOST , 0 ))
73+ s .listen (1 )
74+ port = s .getsockname ()[1 ]
75+
76+ config = uvicorn .Config (app , host = HOST , port = port , log_level = "error" )
77+ server = uvicorn .Server (config )
78+
79+ server_thread = threading .Thread (target = server .run , daemon = True )
80+ server_thread .start ()
81+
82+ while not server .started :
83+ pass
84+
85+ url = f"http://{ HOST } :{ port } "
86+
8587 runner = pyperf .Runner ()
8688 runner .metadata ['description' ] = "Test the performance of HTTP requests with FastAPI"
87- runner .bench_time_func ("fastapi_http" , bench_fastapi )
89+ runner .bench_time_func ("fastapi_http" , bench_fastapi , url )
0 commit comments