Ne peut pas pickle < "type de fonction" >: attribut de recherche __builtin__.la fonction a échoué

Je reçois cette erreur dans mon application Django, cependant, il arrive seulement une fois par jour ou moins et il s'avère extrêmement difficile à déboguer.

Environment:

Request Method: POST

Django Version: 1.3.1
Python Version: 2.6.6
Installed Applications:
['django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'fimedlabs',
 'data',
 'djcelery']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'fimedlabs.auth.userMiddleWare')


Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
  178.                 response = middleware_method(request, response)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/middleware.py" in process_response
  36.                 request.session.save()
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/db.py" in save
  57.             session_data = self.encode(self._get_session(no_load=must_create)),
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/base.py" in encode
  93.         pickled = pickle.dumps(session_dict, pickle.HIGHEST_PROTOCOL)

Exception Type: PicklingError at /
Exception Value: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

J'ai essayé de répondre à ceci:

Comment dire pour lequel des attributs de l'objet pickle échoue?

par l'ajout de l'auto à l'erreur réelle pour voir si cela permettrait d'imprimer quoi que ce soit dans le Django d'erreur en vain.

Où puis-je imprimer l'objet est de donner à des questions à partir de cette erreur afin qu'il apparaisse dans la Django page d'erreur?

Merci!
~Matt

EDIT: Le seul objet que je suis stocker dans le cache, est un objet utilisateur avec le code:

class user(object):
username = str()
userid = uuid.UUID(int=0)
client = models.Client()
clientid = uuid.UUID(int=0)
clientname = ''
data = models.User()
accesslevel = models.AccessLevel()
active = False
client_active = False
isFimed = False
isFimedAdmin = False
isClientAdmin = False
isFimedManager = False
mysettingsform = None
viewingas = False
menu = []
_exists = False
_authenticated = False
def __str__(self):
return str(self.__dict__.copy())
def __getstate__(self):
return self.__dict__.copy()
def __setstate__(self, dict):
self.__dict__ = dict
def __init__(self, username=None):
if username:
self.initialize(username)
def initialize(self, username):
self.username = username
model = models.User.objects.filter(username=username).all()
if len(model) == 1:
model = model[0]
self.data = model
self._exists = True
self.userid = self.data.id
self.active = self.data.active
self.isFimed = self.data.isFimed()
self.isFimedAdmin = self.data.isFimedAdmin()
self.isClientAdmin = self.data.isClientAdmin()
self.isFimedManager = self.data.isFimedManager()
self.mysettingsform = UserFormSelf(initial={"id":model.id, "username":model.username, "name":model.name, "email":model.email, "phone":model.phone})
self.accesslevel = models.AccessLevel.objects.filter(id=self.data.accesslevel_id)[:1][0].level
cli = self.data.client
self.client = cli
self.clientid = cli.id
self.clientname = cli.name
if cli.active:
self.client_active = True
model.lastlogin = datetime.datetime.now()
model.save()
self.menu = getMenu(self.data)
else:
self._exists = False
def authenticate(self, password):
self._authenticated = False
if (self.active == False or self.client_active == False):
return False
if self._exists:
import hashlib
hash = hashlib.md5('%s%s' % (str(password), self.data.pwsalt)).hexdigest()
if hash == self.data.pwhash:
self._authenticated = True
return True
return False
def updateUser(self):
self.initialize(models.User.objects.filter(id=self.userid).get().username)
def mkContext(self):
c = Context()
c['menu'] = self.menu
c['user'] = self
c['language'] = language
c['colors'] = colors
c["isFimed"] = self.isFimed
c["isFimedAdmin"] = self.isFimedAdmin
c["isClientAdmin"] = self.isClientAdmin
c["isFimedManager"] = self.isFimedManager
c["mysettingsform"] = self.mysettingsform
return c

EDIT: fichier WSGI après Werkzeug:

import django.core.handlers.wsgi
djangoapplication = django.core.handlers.wsgi.WSGIHandler()
def application(environ, start_response):
if 'SCRIPT_NAME' in environ:
del environ['SCRIPT_NAME']
return djangoapplication(environ, start_response)
# The following lines enable the werkzeug debugger
import django.views.debug
def null_technical_500_response(request, exc_type, exc_value, tb):
raise exc_type, exc_value, tb
django.views.debug.technical_500_response = null_technical_500_response
from werkzeug.debug import DebuggedApplication
application = DebuggedApplication(application, evalex=True)

OriginalL'auteur MatthewKremer | 2012-06-05