Fixed #5133 -- Explicitly close memcached connections after each request
(similar to database connection management). We can't effectively manage the lifecycle by pooling connections and recent versions of python-memcache can lead to connection exhaustion in some quite reasonable setups. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8418 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
f505bd6e41
commit
2d2396a384
|
@ -17,6 +17,7 @@ See docs/cache.txt for information on the public API.
|
|||
|
||||
from cgi import parse_qsl
|
||||
from django.conf import settings
|
||||
from django.core import signals
|
||||
from django.core.cache.backends.base import InvalidCacheBackendError
|
||||
|
||||
# Name for use in settings file --> name of module in "backends" directory.
|
||||
|
@ -54,3 +55,10 @@ def get_cache(backend_uri):
|
|||
return getattr(module, 'CacheClass')(host, params)
|
||||
|
||||
cache = get_cache(settings.CACHE_BACKEND)
|
||||
|
||||
# Some caches -- pythont-memcached in particular -- need to do a cleanup at the
|
||||
# end of a request cycle. If the cache provides a close() method, wire it up
|
||||
# here.
|
||||
if hasattr(cache, 'close'):
|
||||
signals.request_finished.connect(cache.close)
|
||||
|
||||
|
|
|
@ -39,3 +39,7 @@ class CacheClass(BaseCache):
|
|||
|
||||
def get_many(self, keys):
|
||||
return self._cache.get_multi(map(smart_str,keys))
|
||||
|
||||
def close(self, **kwargs):
|
||||
self._cache.disconnect_all()
|
||||
|
||||
|
|
Loading…
Reference in New Issue