FastAPI性能测试

本文最后更新于 2024年4月30日 下午

FastAPI性能测试

性能测试

代码:

1
2
3
4
5
6
7
8
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def root():
return {"message": "Hello World"}

结果:

1
2
3
4
5
6
7
8
9
10
leonelgavin@Leonel-Gavin-MacBook-Air ~ % wrk -t20 -c1000 -d30s http://127.0.0.1:8000
Running 30s test @ http://127.0.0.1:8000
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 130.29ms 24.32ms 381.62ms 81.29%
Req/Sec 377.54 87.76 663.00 64.53%
225601 requests in 30.07s, 32.27MB read
Socket errors: connect 0, read 25036, write 34, timeout 0
Requests/sec: 7503.51
Transfer/sec: 1.07MB

代码:

1
2
3
4
5
6
7
8
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
return {"message": "Hello World"}

结果:

1
2
3
4
5
6
7
8
9
10
11
leonelgavin@Leonel-Gavin-MacBook-Air ~ % wrk -t20 -c1000 -d30s http://127.0.0.1:8000
Running 30s test @ http://127.0.0.1:8000
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 63.87ms 70.67ms 1.99s 99.12%
Req/Sec 718.26 196.99 1.85k 73.12%
429081 requests in 30.05s, 61.38MB read
Socket errors: connect 0, read 6974, write 36, timeout 399
Requests/sec: 14278.10
Transfer/sec: 2.04MB
leonelgavin@Leonel-Gavin-MacBook-Air ~ %

在本地通过wrk工具对FastAPI应用进行了测试。测试结果显示了在不同条件下的请求延迟、每秒请求数和数据传输速率。

第一次测试的结果显示:

  • 平均延迟为130.29毫秒。
  • 每秒请求数为377.54。
  • 总请求数为225601,在30.07秒内处理。
  • 数据传输速率为1.07MB/秒。

第二次测试的结果显示:

  • 平均延迟为63.87毫秒。
  • 每秒请求数为718.26。
  • 总请求数为429081,在30.05秒内处理。
  • 数据传输速率为2.04MB/秒。

可以看到,第二次测试的性能表现更好,平均延迟更低,每秒请求数更高,数据传输速率也更高。

在上述两段代码中,主要的区别在于使用了async关键字。async def定义的函数是异步函数,而不带async关键字的函数是同步函数

在 Python 中,异步函数允许在等待 I/O 操作时释放控制权,从而允许在等待期间执行其他任务。这使得异步函数在处理高并发请求时能够更有效地利用系统资源,因为它们能够同时处理多个请求而不会被一个请求的阻塞影响。相比之下,同步函数在等待 I/O 操作时会阻塞当前线程,导致无法同时处理其他请求。

因此,使用异步函数可以提高 FastAPI 应用的性能,特别是在高并发场景下。异步函数的性能更好,因为它们能够更有效地处理请求,并且能够更好地利用系统资源。

async是Python语言中的一个关键字,用于定义异步函数。异步函数允许在等待 I/O 操作时释放控制权,以便执行其他任务。

FastAPI 并没有提供 async 这个关键字,它只是利用了 Python 中的异步特性来提供异步支持。因此,异步函数是 Python 语言自身提供的功能,而不是由 FastAPI 单独提供的。FastAPI 利用了 Python 的异步特性,使得我们可以轻松地编写异步的 Web 应用程序。


FastAPI性能测试
https://gipsyfine.xyz/2024/04/29/FastAPI性能测试/
作者
Gipsyfine
发布于
2024年4月29日
更新于
2024年4月30日
许可协议