Flaskで書かれたWebアプリケーションがあります。誰もが示唆するように、私はFlaskを本番環境で使用することはできません。だから私はGunicorn with Flaskと考えました。
Flaskアプリケーション私はいくつかの機械学習モデルをロードしています。これらは合計8GBのサイズです。私のWebアプリケーションの同時実行は1000リクエストになります。そしてRAMは15GBです。
では、このアプリケーションを実行する最良の方法は何ですか?
複数のワーカーでアプリを起動したり、Gunicornで非同期ワーカーを起動したりできます。
フラスコserver.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
Gevent非同期ワーカーを持つGunicorn
gunicorn server:app -k gevent --worker-connections 1000
Gunicorn 1ワーカー12スレッド:
gunicorn server:app -w 1 --threads 12
4つのワーカーを持つGunicorn(マルチプロセッシング):
gunicorn server:app -w 4
Flask=この投稿の同時実行性に関する詳細: 単一のFlaskプロセスが受信する同時リクエストの数 。
最善の方法は、プリフォークモードを使用することです( preload_app = True )。これにより、「マスター」プロセスでコードが初期化され、ワーカープロセスを分岐してリクエストを処理します。 Linuxで実行しており、モデルが読み取り専用であると想定している場合、OSはすべてのプロセス間で物理メモリを再利用できるほどスマートです。