2017-02-21 17 views
2

Я использую python wrapper 'geoip2' для базы данных GeoIP от MaxMind. В документах говорится, что вы должны создать только один экземпляр считывателя баз данных, потому что открытие базы данных очень дорого, и, конечно, открытие его для каждого запроса - очень плохая идея.MaxMind GeoIP2 один экземпляр в Django

Итак, если у меня есть Django (1.10) + Gunicorn на моем сервере, как мне создать «синглтон» считывателя баз данных? Это вообще не вопрос о geoip2 модуля, это вопрос о том:

  1. Как я должен создать единый объект, доступный из приложения (не весь проект)? Можно ли сделать что-то подобное в __init__: os.environ['APP_VAR_WHATEVER'] = InitObject()?

  2. К сожалению, я не знаю многого о Gunicorn, так что второй вопросвопрос: как долго живет рабочий? Перезапускается ли каждый N минут/секунд? Я задаю этот вопрос, потому что я боюсь, если он слишком часто работает с респаунами, это создаст дополнительную нежелательную загрузку системы .

ответ

2
  1. Как уже упоминалось, вы можете реализовать одноэлементный шаблон для того, чтобы иметь только один считыватель базы данных, который должен кэшировать базы данных в памяти, чтобы сделать запросы быстрее (например, является менее дорогостоящим для запроса словарь, чем объект базы данных).
  2. Работники, работающие с Gunicorn, которые остаются неактивными более чем на несколько секунд (по умолчанию 30 секунд), но вы можете настроить значение timeout, чтобы удовлетворить ваши потребности, если ваш работник не работает в течение длительного периода времени, и вы не хотите, чтобы он перезапускался часто ,

Здесь http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html является полезным примером паттерна Singleton

 Смежные вопросы

  • Нет связанных вопросов^_^