问题
I'm using the standard (as opposed to NonRel) version of Django connected to PostgreSQL on top of Apache + mod_wsgi. This setup also connects to MongoDB (some data is saved externally). Right now I have to create a new MongoDB connection for each Django request, and pass it along throughout the call stack to all functions that require access to MongoDB. Is there a way to cache connections between requests?
Edit
At the risk of blasphemy, would a global variable work in this case?
回答1:
There are several ways explaining how pymongo can work (or fail) with mod_wsgi, suggested here: http://api.mongodb.org/python/current/faq.html?highlight=wsgi#does-pymongo-work-with-mod-wsgi
In addition you can use some kind of pooling solution, like described here: http://www.mongodb.org/display/DOCS/Notes+on+Pooling+for+Mongo+Drivers
One project that I know already to have pooling is MongoEngine, its a very simple ORM that uses pymongo behind the scenes. You might want to look into it together with the pymongo faq solutions above.
回答2:
You can instantiate MongoDB connection somewhere and import it as opposed to calling pymongo.connection.Connection()
every time you need it. Or you can create a Singleton to do this. Something like this in 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
Wouldn't this solve your problem?
来源:https://stackoverflow.com/questions/10992718/caching-mongodb-connections-in-django