2017-02-21 4 views
2

MaxMind의 GeoIP 데이터베이스에 python wrapper 'geoip2'를 사용하고 있습니다. 문서를 열 때 데이터베이스를 열면 데이터베이스가 매우 비싸고 모든 요청에 ​​대해 열어야하므로 데이터베이스 판독기의 인스턴스는 하나만 만들어야한다고합니다.MaxMind 장고의 GeoIP2 단일 인스턴스

내 서버에 Django (1.10) + Gunicorn이있는 경우 데이터베이스 리더의 "싱글 톤"을 어떻게 작성해야합니까? 즉, 일반적으로 geoip2 모듈에 대한 질문이 아니라, 그것에 대해 질문입니다 :

  1. 나는 응용 프로그램 (안 전체 프로젝트)에서 액세스 할 수있는 단일 객체를 생성하는 방법을

    ? __init__ : os.environ['APP_VAR_WHATEVER'] = InitObject()에서 이렇게 할 수 있습니까?

  2. 불행히도 Gunicorn에 대해서는 잘 모릅니다. 따라서 두 번째 질문은 : 근로자는 얼마나 오래 살고 있습니까? N 분/초마다 다시 시작하나요? 나는이 질문을하고있다. 왜냐하면 만약에 이 노동자들을 너무 자주 respawn한다면 두려운 것이기 때문에 그것은 바람직하지 않은 추가 시스템을 만들 것이다. . 당신이 언급 한 바와 같이

답변

2
  1. , 당신은 더 빠른 쿼리를 만들기 위해 메모리 데이터베이스 캐시해야 하나의 데이터베이스 리더를하기 위해 싱글 톤 패턴을 구현할 수 있습니다 (예를 들어, 쿼리 할 비용이 저렴 사전은 데이터베이스 객체보다).
  2. 비정상적으로 몇 초 (기본값은 30 초) 인 Gunicorn 근로자가 근무 시간이 길지 만 자주 다시 시작하지 않으려면 timeout 값을 구성 할 수 있습니다 . 여기

http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html는 싱글 패턴의 유용한 예이다