Flaskを試したメモ。
環境
-
macOS Catalina
-
Python 3.7.3
仮想環境作成
python3 -m venv $HOME/work/flask
source $HOME/work/flask/bin/activate
Flaskインストール
pip install -U flask
APIコード
flask_sample.py
from flask import Flask
app = Flask(__name__)
@app.route('/hello/<name>', methods=['GET'])
def hello(name):
return 'Hello %s' % name
app.run(host='localhost', port=8081, debug=True, threaded=True)
app.run()で threaded=True
を指定することでマルチスレッドに対応する。
実行
python3 flask_sample.py
確認
curl http://localhost:8081/hello/katsumi
仮想環境をDeactivate
deactivate
負荷をかけてみる
Gatlingで負荷をかけてみる。 100 Users/秒で試した。
Requests |
Executions |
Response Time (ms) |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Total |
OK |
KO |
% KO |
Req/s |
Min |
50th pct |
75th pct |
95th pct |
99th pct |
Max |
Mean |
Std Dev |
|
Global Information |
100 |
100 |
0 |
0% |
100 |
139 |
370 |
390 |
409 |
421 |
424 |
364 |
45 |
request_0 |
100 |
100 |
0 |
0% |
100 |
139 |
370 |
390 |
409 |
421 |
424 |
364 |
45 |
同じ条件でBottleを使った下記コードを実行してみる。
from bottle import run, get
@get('/hello/<name>')
def hello(name):
return 'Hello %s' % name
run(host='localhost', port=8081, debug=True, reloader=True)
Requests |
Executions |
Response Time (ms) |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Total |
OK |
KO |
% KO |
Req/s |
Min |
50th pct |
75th pct |
95th pct |
99th pct |
Max |
Mean |
Std Dev |
|
Global Information |
100 |
58 |
42 |
42% |
50 |
135 |
498 |
628 |
847 |
1241 |
1245 |
530 |
230 |
request_0 |
100 |
58 |
42 |
42% |
50 |
135 |
498 |
628 |
847 |
1241 |
1245 |
530 |
230 |
Bottleの場合、58リクエストしか成功しない。調子が良い?と78リクエストぐらい成功するけど、 何度か試しても100リクエストが成功することはなかった。 下記エラーが出ているので、コネクション数が足りなくなったのだとは思うけど、どこで設定するんだろう。 あとで調べてみよう。
i.n.c.AbstractChannel$AnnotatedSocketException: Connection reset by peer: localhost/127.0.0.1:8081