我在 Apache + mod_wsgi 之上使用连接到 PostgreSQL 的标准(而不是 NonRel)版本的 Django。此设置还连接到 MongoDB(一些数据保存在外部)。现在我必须为每个 Django 请求创建一个新的 MongoDB 连接,并将其通过调用堆栈传递给所有需要访问 MongoDB 的函数。有没有办法缓存请求之间的连接?
编辑
冒着亵渎的风险,在这种情况下全局变量会起作用吗?
我在 Apache + mod_wsgi 之上使用连接到 PostgreSQL 的标准(而不是 NonRel)版本的 Django。此设置还连接到 MongoDB(一些数据保存在外部)。现在我必须为每个 Django 请求创建一个新的 MongoDB 连接,并将其通过调用堆栈传递给所有需要访问 MongoDB 的函数。有没有办法缓存请求之间的连接?
编辑
冒着亵渎的风险,在这种情况下全局变量会起作用吗?
有几种方法可以解释 pymongo 如何与 mod_wsgi 一起工作(或失败),这里建议:http ://api.mongodb.org/python/current/faq.html?highlight=wsgi#does-pymongo-work-with-mod -wsgi
此外,您可以使用某种池解决方案,如下所述:http ://www.mongodb.org/display/DOCS/Notes+on+Pooling+for+Mongo+Drivers
我已经知道有一个池化项目是MongoEngine,它是一个非常简单的 ORM,它在幕后使用 pymongo。您可能想与上面的 pymongo 常见问题解决方案一起研究它。
pymongo.connection.Connection()
您可以在某处实例化 MongoDB 连接并将其导入,而不是每次需要时都调用它。或者您可以创建一个 Singleton 来执行此操作。像这样的东西settings.py
。
class ConnectionSingleton(object):
"""Represents a MongoDB connection"""
conn=None
def __new__(cls,*args,**kwds):
if cls.conn is None:
cls.conn=pymongo.connection.Connection()
return cls.conn
这不能解决你的问题吗?