Запускайте приложение конфигурации Django только один раз при использовании нескольких рабочих Gunicorn - PullRequest
0 голосов
/ 23 декабря 2018

Я использую:

  • python 3.6
  • django == 2.1.1
  • gunicorn == 19.9.0

я сделал следующее:

  • создал проект django с именем api
  • создал apiapp (приложение в моем проекте)

, и у меня есть этот код в apps.py api_app's:

from django.apps import AppConfig
from api import settings

class ApiappConfig(AppConfig):
    name = 'apiapp'
    verbose_name = "random_name"

    def ready(self):
        self.job()


    @classmethod
    def job(cls):
        ### doing whatever here for example :
        print(settings.SHARED_VARIABLE)

и следующее в __init__.py api_app:

import os
default_app_config = 'apiapp.apps.ApiappConfig'

я создаю API, такпри развертывании я должен использовать несколько рабочих:

gunicorn api.wsgi -w 10

Теперь моя проблема в том, что функция job, которая вызывается при запуске сервера, вызывается 10 раз, потому что я использую 10Работники gunicorn, я бы хотел назвать это только один раз

, еще одна вещь, которую я хотел бы сделать, - это иметь переменную settings.SHARED_VARIABLE, разделяемую между разными работниками.эта переменная будет обновляться только рабочим, который запустит app.py при запуске сервера.

Спасибо!

1 Ответ

0 голосов
/ 31 декабря 2018

gunicorn имеет настройку для этого: --preload

Итак, после того, как я добавлю это в settings.py: SHARED_VARIABLE = 'content of SHARED_VARIABLE' (и исправлено apiapp/__init__.py для использования реальногоимя приложения), я могу запустить gunicorn с приложением, загруженным только один раз:

$ gunicorn api.wsgi -w 10 --preload
content of SHARED_VARIABLE
[2018-12-31 10:12:15 +0000] [394] [INFO] Starting gunicorn 19.6.0
[2018-12-31 10:12:15 +0000] [394] [INFO] Listening at: http://127.0.0.1:8000 (394)
[2018-12-31 10:12:15 +0000] [394] [INFO] Using worker: sync
[2018-12-31 10:12:15 +0000] [399] [INFO] Booting worker with pid: 399
[2018-12-31 10:12:15 +0000] [400] [INFO] Booting worker with pid: 400
[2018-12-31 10:12:15 +0000] [401] [INFO] Booting worker with pid: 401
[2018-12-31 10:12:15 +0000] [403] [INFO] Booting worker with pid: 403
[2018-12-31 10:12:15 +0000] [404] [INFO] Booting worker with pid: 404
[2018-12-31 10:12:15 +0000] [405] [INFO] Booting worker with pid: 405
[2018-12-31 10:12:15 +0000] [406] [INFO] Booting worker with pid: 406
[2018-12-31 10:12:15 +0000] [408] [INFO] Booting worker with pid: 408
[2018-12-31 10:12:15 +0000] [410] [INFO] Booting worker with pid: 410
[2018-12-31 10:12:15 +0000] [411] [INFO] Booting worker with pid: 411
...