[Python] Flaskを試したメモ

Jan 22, 2020   #Python  #Flask 

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/秒で試した。

Table 1. Flask, threaded=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

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)
Table 2. Bottle

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