【问题标题】:MaxMind GeoIP2 single instance in DjangoDjango 中的 MaxMind GeoIP2 单实例
【发布时间】:2017-02-21 04:09:53
【问题描述】:

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

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

  1. 我应该如何创建一个可以从应用程序访问的对象(不是 整个项目)?在__init__:os.environ['APP_VAR_WHATEVER'] = InitObject() 中做这样的事情可以吗?

  2. 不幸的是,我对 Gunicorn 了解不多,所以第二个 问题是:工人能活多久?是否每隔 N 重启一次 分钟/秒?我问这个问题是因为我害怕如果它 过于频繁地重生工人,这会产生额外的不受欢迎的 系统负载。

【问题讨论】:

    标签: python django gunicorn


    【解决方案1】:
    1. 正如您所提到的,您可以实现单例模式,以便只有一个数据库读取器应该将数据库缓存在内存中以加快查询速度(例如,查询字典比查询数据库对象更便宜) )。
    2. Gunicorn 工作人员保持不活动状态超过几秒(默认为 30 秒),但您可以配置 timeout 值以满足您的需要,如果您的工作人员长时间保持沉默并且您不希望它这样做经常重启。

    这里http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html 是一个有用的单例模式示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      相关资源
      最近更新 更多