mirror of
https://github.com/django/django.git
synced 2025-10-26 15:16:09 +00:00
Fixed #3012 -- Changed the locmem cache backend to use pickle instead of deepcopy to make it compatible with iterators (which cannot be copied). Patch from Sundance.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5703 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
16
django/core/cache/backends/locmem.py
vendored
16
django/core/cache/backends/locmem.py
vendored
@@ -2,7 +2,11 @@
|
||||
|
||||
from django.core.cache.backends.simple import CacheClass as SimpleCacheClass
|
||||
from django.utils.synch import RWLock
|
||||
import copy, time
|
||||
import time
|
||||
try:
|
||||
import cPickle as pickle
|
||||
except ImportError:
|
||||
import pickle
|
||||
|
||||
class CacheClass(SimpleCacheClass):
|
||||
def __init__(self, host, params):
|
||||
@@ -20,7 +24,10 @@ class CacheClass(SimpleCacheClass):
|
||||
elif exp < now:
|
||||
should_delete = True
|
||||
else:
|
||||
return copy.deepcopy(self._cache[key])
|
||||
try:
|
||||
return pickle.loads(self._cache[key])
|
||||
except pickle.PickleError:
|
||||
return default
|
||||
finally:
|
||||
self._lock.reader_leaves()
|
||||
if should_delete:
|
||||
@@ -35,7 +42,10 @@ class CacheClass(SimpleCacheClass):
|
||||
def set(self, key, value, timeout=None):
|
||||
self._lock.writer_enters()
|
||||
try:
|
||||
SimpleCacheClass.set(self, key, value, timeout)
|
||||
try:
|
||||
super(CacheClass, self).set(key, pickle.dumps(value), timeout)
|
||||
except pickle.PickleError:
|
||||
pass
|
||||
finally:
|
||||
self._lock.writer_leaves()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user