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 cgi import parse_qsl
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core import signals
|
||||||
from django.core.cache.backends.base import InvalidCacheBackendError
|
from django.core.cache.backends.base import InvalidCacheBackendError
|
||||||
|
|
||||||
# Name for use in settings file --> name of module in "backends" directory.
|
# 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)
|
return getattr(module, 'CacheClass')(host, params)
|
||||||
|
|
||||||
cache = get_cache(settings.CACHE_BACKEND)
|
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):
|
def get_many(self, keys):
|
||||||
return self._cache.get_multi(map(smart_str,keys))
|
return self._cache.get_multi(map(smart_str,keys))
|
||||||
|
|
||||||
|
def close(self, **kwargs):
|
||||||
|
self._cache.disconnect_all()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue