弱小的物体消失了python/django

弱小的物体消失了python/django,python,django,caching,django-cache,django-caching,Python,Django,Caching,Django Cache,Django Caching,我在django项目中遇到了这个问题,我相信它与缓存有关。它大约每6个月出现一次,并通过重新启动应用程序“修复”,几个月后才会出现。突然,所有视图都会失败,只有这个例外 TypeError: weak object has gone away 而且它并不总是同一个对象,每个视图都会因为尝试访问不同的对象而失败。在这种情况下,它访问用户(使用request.user.is\u authenticated()),但其他页面使用其他对象 我想一定是缓存出了问题。也许这在django甚至是个问题。我不

我在django项目中遇到了这个问题,我相信它与缓存有关。它大约每6个月出现一次,并通过重新启动应用程序“修复”,几个月后才会出现。突然,所有视图都会失败,只有这个例外

TypeError: weak object has gone away
而且它并不总是同一个对象,每个视图都会因为尝试访问不同的对象而失败。在这种情况下,它访问用户(使用
request.user.is\u authenticated()
),但其他页面使用其他对象

我想一定是缓存出了问题。也许这在django甚至是个问题。我不知道。它只是工作正常,直到它不起作用,而且似乎没有人在互联网上谈论这个例外

以下是一个样本回溯:

Traceback (most recent call last):

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/core/handlers/base.py", line 88, in get_response
    response = middleware_method(request)

  File "/home/rsaenz/webapps/club/club/cms/socios/views.py", line 143, in process_request
    if not request.user.is_authenticated():

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/utils/functional.py", line 213, in inner
    self._setup()

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/utils/functional.py", line 298, in _setup
    self._wrapped = self._setupfunc()

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/contrib/auth/middleware.py", line 18, in <lambda>
    request.user = SimpleLazyObject(lambda: get_user(request))

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/contrib/auth/middleware.py", line 10, in get_user
    request._cached_user = auth.get_user(request)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 140, in get_user
    user_id = request.session[SESSION_KEY]

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py", line 47, in __getitem__
    return self._session[key]

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py", line 173, in _get_session
    self._session_cache = self.load()

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/contrib/sessions/backends/db.py", line 20, in load
    expire_date__gt=timezone.now()

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/db/models/manager.py", line 151, in get
    return self.get_queryset().get(*args, **kwargs)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/db/models/query.py", line 301, in get
    clone = self.filter(*args, **kwargs)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/db/models/query.py", line 593, in filter
    return self._filter_or_exclude(False, *args, **kwargs)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/db/models/query.py", line 611, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1204, in add_q
    clause = self._add_q(where_part, used_aliases)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1240, in _add_q
    current_negated=current_negated)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1131, in build_filter
    clause.add(constraint, AND)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/utils/tree.py", line 104, in add
    data = self._prepare_data(data)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/db/models/sql/where.py", line 61, in _prepare_data
    if is_iterator(value):

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/site-packages/django/utils/itercompat.py", line 30, in is_iterator
    return isinstance(x, collections.Iterator)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/abc.py", line 144, in __instancecheck__
    return cls.__subclasscheck__(subtype)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/abc.py", line 184, in __subclasscheck__
    cls._abc_negative_cache.add(subclass)

  File "/home/rsaenz/virtualenvs/club/lib/python2.7/_weakrefset.py", line 86, in add
    self.data.add(ref(item, self._remove))

TypeError: weak object has gone away
回溯(最近一次呼叫最后一次):
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/core/handlers/base.py”,第88行,在get_响应中
响应=中间件\方法(请求)
文件“/home/rsaenz/webapps/club/club/cms/socios/views.py”,第143行,正在处理请求
如果不是,则请求。用户。是否经过身份验证()
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/utils/functional.py”,第213行,内部
self.\u设置()
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/utils/functional.py”,第298行,在_设置中
self.\u wrapped=self.\u setupfunc()
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/contrib/auth/middleware.py”,第18行,在
request.user=SimpleLazyObject(lambda:get_user(request))
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/contrib/auth/middleware.py”,第10行,在get_user中
请求。_cached_user=auth.get_user(请求)
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/contrib/auth/_init__.py”,第140行,在get_user中
user\u id=request.session[session\u KEY]
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/contrib/sessions/backends/base.py”,第47行,在__
返回self.\u会话[键]
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/contrib/sessions/backends/base.py”,第173行,在获取会话中
self.\u session\u cache=self.load()
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/contrib/sessions/backends/db.py”,第20行,已加载
expire\u date\uu gt=timezone.now()
get中的文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/db/models/manager.py”,第151行
返回self.get_queryset().get(*args,**kwargs)
get中第301行的文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/db/models/query.py”
clone=self.filter(*args,**kwargs)
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/db/models/query.py”,第593行,在过滤器中
返回self.\u filter\u或\u exclude(False、*args、**kwargs)
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/db/models/query.py”,第611行,在“过滤器”或“排除”中
clone.query.add_q(q(*args,**kwargs))
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/db/models/sql/query.py”,第1204行,在Addq中
子句=self.\u添加\u q(其中\u部分,使用的\u别名)
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/db/models/sql/query.py”,第1240行,在
当前\u否定=当前\u否定)
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/db/models/sql/query.py”,第1131行,内置过滤器
添加(约束,和)
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/utils/tree.py”,第104行,添加
数据=自身。准备数据(数据)
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/db/models/sql/where.py”,第61行,在“准备”数据中
如果是_迭代器(值):
is_迭代器中的第30行文件“/home/rsaenz/virtualenvs/club/lib/python2.7/site packages/django/utils/itercompat.py”
返回isinstance(x,collections.Iterator)
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/abc.py”,第144行,在实例检查中__
返回cls.\子项检查\子类型
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/abc.py”,第184行,在子检查中__
cls.\u abc\u negative\u cache.add(子类)
文件“/home/rsaenz/virtualenvs/club/lib/python2.7/_weakrefset.py”,第86行,添加
自我数据添加(参考(项目,自我删除))
TypeError:弱对象已消失

谢谢

基于回溯,这看起来更像是一个Python
weakrefset
问题,它是
collections.Iterator
通过
abc
依赖的(抽象基类)模块。

基于回溯,这看起来更像是一个Python
weakrefset
问题,它是
集合。迭代器依赖于
abc
(抽象基类)模块。

那么您认为解决方案是什么?如果这是一个python问题,那么我需要完全避免这些缓存?您找到解决这个问题的方法了吗?我也遇到了同样的问题,但不知道问题出在哪里:那么你认为解决办法是什么?如果这是一个python问题,那么我需要完全避免这些缓存?您找到解决这个问题的方法了吗?我也遇到了同样的问题,但不知道问题出在哪里: