2016-06-29 11 views
0

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 
+1

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

Antwort

0

Ideal der Memcached-Server nicht auf das sein sollte gleicher Host wie Ihr Webserver. Bei einer standardmäßigen memcached-Installation werden mehrere memcached-Instanzen auf ihren eigenen Servern in der Nähe der Webserver und der Webserver, die über das Netzwerk mit ihnen kommunizieren, eigenständig ausgeführt. Bei komplexeren Installationen werden mehrere memcached-Instanzen von einem Proxy verwaltet, der Anfragen an memcached Server-Hosts weiterleitet. Ein beliebter Proxy hierfür ist Mcrouter.

Verwandte Themen