ここあのひとりごと

RobynとFastAPIの速度の比較

HoloのバックエンドをRobynに書き換えるかもしれないので比較してみる。

ベンチマークにはbombardierを使います。初めてなので間違っている部分もあるかもしれませんが予めご了承ください。

Robyn

Rust製のWebフレームワークらしい。Cargo.tomlを見た感じだと内部ではActix-Webが使われてる?

コード

1
2
3
4
5
6
7
8
9
from robyn import Robyn, jsonify

app = Robyn(__file__)

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

app.start(port=3000)

Benchmark

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
PS C:\Users\AmaseCocoa\benchmarks> bombardier -c 100 -n 1000000 http://localhost:3000
Bombarding http://localhost:3000 with 1000000 request(s) using 100 connection(s)
 1000000 / 1000000 [=============================================================================] 100.00% 5186/s 3m12s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec      5193.28    1122.21   23542.53
  Latency       19.27ms     2.93ms    85.12ms
  HTTP codes:
    1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:     0.93MB/s

FastAPI (uvicorn)

ASGIを利用したWebフレームワーク。内部ではStarletteとPydanticが使われていてPython製のフレームワークの中では速い。

...