Gunicorn имеет довольно удивительную конфигурацию. Просматривал клон git их источника и нашел example_config.py, у которого есть "post_fork", который заставил меня задуматься. После того, как я немного побеспокоился об источнике, я нашел это решение.
% 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
Надеюсь, что это поможет кому-нибудь из Google найти эту подсказку.
Довольно круто, что Gunicorn был достаточно гибок, чтобы учесть это!
ОБНОВЛЕНИЕ: обновленный код, простая загрузка модулей в настройках иногда прерывается из-за того, как django загружает модули, я полагаю ... эта новая обезьяна кода исправляет gunicorn для загрузки модулей в «безопасное» время .. надеюсь
ОБНОВЛЕНИЕ: gunicorn 0.12.1 решает эту проблему