当我的django应用程序尝试从缓存中获取或存储某些内容时,有时会出现以下错误:
c = cache.get(pk)
File "/opt/python3/lib/python3.4/site-packages/django/core/cache/__init__.py", line 131, in __getattr__
return getattr(caches[DEFAULT_CACHE_ALIAS], name)
File "/opt/python3/lib/python3.4/site-packages/django/core/cache/__init__.py", line 113, in __getitem__
cache = _create_cache(alias)
File "/opt/python3/lib/python3.4/site-packages/django/core/cache/__init__.py", line 88, in _create_cache
return backend_cls(location, params)
File "/opt/python3/lib/python3.4/site-packages/django/core/cache/backends/memcached.py", line 185, in __init__
value_not_found_exception=pylibmc.NotFound)
AttributeError: 'module' object has no attribute 'NotFound'
但为什么呢?模块具有属性,并且大多数时候它都有效,没有可以打破这个名称的同名文件,在哪里查找原因?
>>> import pylibmc
>>> pylibmc.NotFound
<class '_pylibmc.NotFound'>
>>>
答案 0 :(得分:1)
tl; dr:尝试在应用启动位置导入pylibmc,例如uwsgi
或manage.py
文件。
我的猜测是在PyLibMCCache.__init__
内的请求线程中导入pylibmc
而不是在应用程序启动时导致多线程问题。 (IMO Django在那里进行导入,因为并非所有Django安装都使用pylibmc
,因此他们不应该强制它作为依赖项在每个应用程序上使用)
虽然我对import
工作原理的内部不够熟悉,但我怀疑会发生什么,如下所示
pylibmc
sys.modules
pylibmc
中为pylibmc
->
AttributeError
sys.modules
被提升pylibmc.NotFound
,现在importlib.util.LazyLoader
可用通常,Python似乎discourage runtime loading of modules而不是启动时加载。
强调是我的
注意:对于启动时间至关重要的项目,此类[
$(document).ready(function () { console.log('Script loaded...'); $("#btn-reg").click(function(){ var newusername = $("#username").val(); var newpassword = $("#newpassword").val(); var newclub = $("#newclub").val(); $.ajax({ method: "POST", url: "classCalling.php", data: { newusername: newusername,newpassword: newpassword,newclub: newclub }, success:function(data){ alert(data); } }); }); });
]允许在未使用的情况下最大程度地降低加载模块的成本。对于启动时间不是必需的项目,由于加载期间创建的错误消息被推迟并因此发生在上下文之外,因此强烈建议不要使用此类。