この記事では、 Flask の組み込みサーバーから WSGI サーバーに切り替え、その中でも Waitress を使用する方法を紹介します。
Flask は Python 開発における軽量なフレームワークで人気があり、小 ~ 中規模のアプリケーション開発に向いています。 Django だと too much かなと思う場合には Flask を採用することが多いでしょう。
Flask の組み込みサーバー
Flaskには開発の便宜を図るための簡易サーバーが組み込まれています。
このサーバーは開発中にアプリケーションを素早くテストする目的で設計されており、デバッグモードでの実行時に便利なエラーメッセージや再読み込み機能を提供します。
しかし、この組み込みサーバーはセキュリティやパフォーマンスの面で本番環境には適していません。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
一般的に、最初に app.py はこのように定義することが多いでしょう。
ここから起動すると、以下のような警告が出て一瞬焦ります。
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
これは開発用サーバーなので、本番で使わないでね。代わりに WSGI サーバー使ってねっていう意味の警告です。
初めて python を使った開発の時には、 「WSGIサーバー」って何ぞやとなることでしょう。
WSGI サーバーとは
WSGI (Web Server Gateway Interface) は、Python アプリケーションをWebサーバーと連携させるための標準インターフェースです。
WSGI サーバーは、 Flask や Django などのフレームワークで作成されたアプリケーションを、インターネット上で安全かつ効率的に公開するために必要です。
つまり、WSGI サーバーがないとお客様のアプリケーションを安全に運用できないのでプロジェクトでは必須ということです。
Waitress の特徴
Waitressは、純粋なPython製でありながら、複数のプラットフォームで動作するWSGIサーバーです。
シングルスレッド、マルチスレッドの両モードをサポートしており、メモリリークの心配が少なく、多くの同時接続を安定して処理できる点が特徴です。
また、設定がシンプルであり、 Flask や Django といったフレームワークとの統合が容易です。
WSGI サーバーにはいくつか選択肢がありますが、OSによっては動作しないものもあるので、 Waitress が安定の選択肢になりそうです(個人の感想)。
Waitress の導入手順
Waitressのインストール
最初に、Waitressをプロジェクトにインストールします。
※仮想環境の導入及び起動については実施済みの前提として、割愛します。別記事をご参照ください。
コマンドラインまたはターミナルで以下のコマンドを実行してください。
pip install waitress
from flask import Flask
from waitress import serve
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
serve(app, host='0.0.0.0', port=5000)
この変更により、 Flask の組み込みサーバーではなく、 Waitress がウェブサーバーとして機能します。
serve
関数は、アプリケーションを指定のホストとポートで実行します。
起動して、冒頭に記載した警告が表示されないことを確認してみてください。
参考
おわりに
一度経験してしまえばどうということはないのですが、初めての Flask の開発時には色々わからないことが多いと思うのでご参考になれば幸いです。
コメント