アルパカログ

Webエンジニア兼マネージャーがプログラミングやマネジメント、読んだ本のまとめを中心に書いてます。

Gunicorn 重いロードにはpreload_appオプションを使おう(プリロード)

f:id:otoyo0122:20200814131604p:plain:w300

「Gunicorn」はWSGIに対応したPythonのWebサーバー(HTTPサーバー)です。

Gunicornはリクエストを受け付けると、ワーカープロセスを生成(fork)して処理を任せます。

ワーカープロセスで重いファイルをロードすると、リクエストのたびに時間がかかってしまいます。

このエントリでは、Gunicornで前もってロードしておくpreload_appオプションを紹介します。

前もってロードしておくpreload_appオプション

Gunicornには、プロセスをフォークする前にロードしておくことができるpreload_appオプションがあります。

例えば機械学習のモデルや辞書といった重いファイルは、前もってロードしておくことで大幅な時間短縮に繋がります。

preload_appオプションを使うには、サーバー起動時に--preloadオプションを指定するだけです。

$ gunicorn --preload app.wsgi

preload_appオプションの説明

Load application code before the worker processes are forked.

By preloading an application you can save some RAM resources as well as speed up server boot times. Although, if you defer application loading to each worker process, you can reload your application code easily by restarting workers.

preload_appオプションを使って重いファイルをプリロードするには、アプリケーションのロード時にプリロードが実行されなければなりません。

例えば、ルーティングによるリクエストのディスパッチ後に呼び出されるメソッド内でロードしても、プリロードの恩恵は受けられないことに注意が必要です。

以上です。

参考になった方は、ぜひ「はてブ」やSNSでシェアしていただけると嬉しいです。