アルパカログ

プログラミングとマネジメントがメインです。時々エモいのも書きます。

Gunicornで先に重い読み込みを済ませておくpreload_appオプション

PythonのWebサーバーGunicornにはワーカーのためにプロセスをフォークする前に、重いファイルをプリロードしておけるオプションがあります。

例えば機械学習のモデルや辞書といったような重いファイルをロードして使うようなアプリケーションでは、ワーカープロセスが作られてからロードすると毎回ロードのための時間がかかってしまうため、preload_app オプションを使うと大幅な時間短縮に繋がります。

$ 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.

もちろん、アプリケーションのロード時に重いファイルを読み込むようにコードを書き換えてあげる必要がある点には注意です。ルーティングによるdispatch後に呼び出される関数内でロードしてもプリロードの恩恵は受けられません。

参考情報