Gunicorn にはかなり素晴らしい構成があります。彼らのソースのgitクローンをブラウズしていて、「post_fork」を持つexample_config.pyを見つけて、考えさせられました。ソースをもう少し調べた後、この解決策を思いつきました。
% gunicorn_django -c path/to/gunicorn_conf.py path/to/settings.py
gunicorn_conf.py には次の機能があります。
def post_fork(server, worker):
server.log.info("%s: Worker spawned" % worker.pid)
from gunicorn.workers.sync import SyncWorker
class SyncWorkerPreload(SyncWorker):
def run(self):
pass
def init_process(self):
super(SyncWorkerPreload, self).init_process()
from django.db.models.loading import get_apps
get_apps()
server.log.info('%s: App loaded' % self.pid)
super(SyncWorkerPreload, self).run()
worker.__class__ = SyncWorkerPreload
誰かがグーグルでこのヒントを見つけるのに役立つことを願っています.
Gunicorn がこれを可能にするのに十分な柔軟性を持っていたことは非常に素晴らしいことです!
更新:更新されたコード、単に設定でモジュールをロードするだけで、django がモジュールをロードする方法が原因で壊れることがあると思います...この新しいコードモンキーは、「安全な」時間にモジュールをロードするように gunicorn にパッチを当てます...うまくいけば
更新: gunicorn 0.12.1 でこの問題が修正されました