python - Django 中的 MaxMind GeoIP2 单实例

标签 python django gunicorn

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

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

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

  2. 不幸的是,我对Gunicorn了解不多,所以第二个 问题是: worker 的生命周期有多长?是不是每N重启一次 分钟/秒?我问这个问题是因为我担心如果 过于频繁地重生 worker ,这会产生额外的不需要的 系统负载。

最佳答案

  1. 正如您所提到的,您可以实现单例模式,以便只有一个数据库读取器,该读取器应该将数据库缓存在内存中,以使查询更快(例如,查询字典比查询数据库对象更便宜) )。
  2. Gunicorn 工作线程保持不活动状态超过几秒(默认为 30 秒),但您可以配置 timeout如果您的工作线程长时间保持沉默并且您不希望它经常重新启动,那么满足您的需求是有值(value)的。

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

关于python - Django 中的 MaxMind GeoIP2 单实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42358525/

相关文章:

python - Peewee 原子更新复杂逻辑

python - 使用 Python 将照片或视频上传到 Facebook

python - 将 pandas 中的系列分组

python - Neo4j 与 Python 驱动程序 : number of nodes created is far less than expected?

Django使用过滤条件将计数注释为计数

python - Django 1.8 和 Gmail - SMTPAuthenticationError 用户名和密码不被接受

python - django使用xlrd读取批量excel文件太慢

python - Gunicorn:多个后台工作线程

python - Django Gunicorn wsgi

django - django+gunicorn+nginx 配置上的错误网关