Ich benutze Django, um ein Web mit dynamisch generierten Bildern aus einem großen Bildstapel (je ca. 150 MB) zu archivieren. Es soll interaktiv sein, also muss ich den ausgewählten Stapel zwischenspeichern. Dazu verwende ich das memcached Cache-Backend und die Session Engine "django.contrib.sessions.backends.cache".Speicherfehler beim Zwischenspeichern schwerer Daten mit Django
Das Problem ist, dass wenn ich die Seite mit den Sitzungsdaten rendere ich MemoryError erhalten. Ist das der effizientere Ansatz? Ich nehme an, das ist ein Problem mit der Größe der Daten. Wird die Speichergröße trotzdem erhöht? Eine andere Möglichkeit, das zu lösen?
In views.py
def images(request):
if request.method == 'POST':
info_form = InfoForm(request.POST)
if (info_form.is_valid()):
if selected_stack_changed:
matrix = get_matrix(stack_id)
request.session['matrix'] = matrix
else:
matrix = request.session['matrix']
return render(request, url)
In settings.py
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
Und hier die komplette Fehler, den ich bekommen:
Internal Server Error: /data/
Traceback (most recent call last):
File "/home/user/.local/lib/python2.7/site-packages/django/core/handlers/base.py", line 235, in get_response
response = middleware_method(request, response)
File "/home/user/.local/lib/python2.7/site-packages/django/contrib/sessions/middleware.py", line 50, in process_response
request.session.save()
File "/home/user/.local/lib/python2.7/site-packages/django/contrib/sessions/backends/cache.py", line 62, in save
self.get_expiry_age())
File "/home/user/.local/lib/python2.7/site-packages/django/core/cache/backends/memcached.py", line 83, in set
if not self._cache.set(key, value, self.get_backend_timeout(timeout)):
File "/home/user/.local/lib/python2.7/site-packages/memcache.py", line 740, in set
return self._set("set", key, val, time, min_compress_len, noreply)
File "/home/user/.local/lib/python2.7/site-packages/memcache.py", line 1060, in _set
return _unsafe_set()
File "/home/user/.local/lib/python2.7/site-packages/memcache.py", line 1034, in _unsafe_set
store_info = self._val_to_store_info(val, min_compress_len)
File "/home/user/.local/lib/python2.7/site-packages/memcache.py", line 998, in _val_to_store_info
pickler.dump(val)
MemoryError
Jemand könnte Ihnen vielleicht helfen, wenn Sie tatsächlich gezeigt haben, wie Sie memcached verwendet haben! Aber bitte beachten Sie, dass es nicht für sehr große Objekte ausgelegt ist. Die standardmäßige maximale Objektgröße beträgt 1 MB, kann jedoch erhöht werden. – e4c5