Django中的MaxMind GeoIP2单实例

时间:2017-02-21 04:09:53

标签: python django gunicorn

我正在为MaxMind的GeoIP数据库使用python包装器'geoip2'。在文档中说,你应该只创建数据库阅读器的单个实例,因为打开数据库是非常昂贵的,当然,为每个请求打开它是一个非常糟糕的主意。

所以,如果我的服务器上有Django(1.10)+ Gunicorn,我应该如何创建数据库阅读器的“单例”?这通常不是关于geoip2模块的问题,它的问题是:

  1. 我应该如何创建一个可从应用程序访问的单个对象(不是 整个项目)?可以在__init__os.environ['APP_VAR_WHATEVER'] = InitObject()中执行此类操作吗?

  2. 不幸的是,我对Gunicorn知之甚少,所以第二个     问题是:工人住了多长时间?是重新启动每个N.     分/秒?我问这个问题,因为我害怕它     经常重生工人,会产生额外的不必要的     系统负载。

1 个答案:

答案 0 :(得分:2)

  1. 正如您所提到的,您可以实现单例模式,以便只有一个数据库读取器,它应该将数据库缓存在内存中以便更快地进行查询(例如,查询字典比数据库对象更便宜)。
  2. Gunicorn工作人员保持非活动状态超过几秒钟(默认为30秒)但您可以配置timeout值以满足您的需求,如果您的工作人员在很长一段时间内保持沉默并且您不想要它经常重启。
  3. 此处http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html是Singleton Pattern的有用示例