【问题标题】:PyMongo with Django and uwsgiPyMongo 与 Django 和 uwsgi
【发布时间】:2019-06-26 22:41:51
【问题描述】:

我有一个带有 MySQL 后端的 Django 应用程序,我想使用 MongoDB 来保存一些额外的(非关系)数据。我不想将MongoDB 与 Django 的 ORM 一起使用,只是简单的 PyMongo。我应该在哪里初始化PyMongo,以便让一个连接池在由 uwsgi 生成的所有 Python 进程之间共享?

我的 uwsgi 配置如下所示:

[uwsgi]
...
module = myapp.wsgi:application
virtualenv = /var/www/virtualenvs/myapp/
processes = 100
enable-threads = True
single-interpreter = True
uid = www-data
gid = www-data
vacuum = True
...

这将创建 100 个 python 进程,其中每个进程都有一个单独的 MongoClient 连接池,其中包含多个到 MongoDB 的连接。这是非常低效的。我怎样才能拥有一个在所有进程之间共享的连接池?

提前非常感谢!

【问题讨论】:

    标签: python django mongodb pymongo uwsgi


    【解决方案1】:

    PyMongo 是线程安全的,但不是 fork 安全的。 uWSGI通过fork创建多个进程,每个进程都有自己的MongoClient。

    Is PyMongo fork-safe?

    PyMongo 不会跨线程共享连接。减少与 Mongo 的连接数的一种方法是减小线程池的大小。

    在 PyMongo 3 中,传递 maxPoolSize=1

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2011-04-16
      • 1970-01-01
      • 2015-04-30
      • 2019-02-15
      • 2014-04-10
      • 2014-01-24
      • 2017-06-23
      • 1970-01-01
      相关资源
      最近更新 更多