django - 缓存泡沫对象。统一码问题

标签 django memcached pickle suds

我正在使用泡沫https://fedorahosted.org/suds/使用 SOAP 获取数据。我想缓存结果(使用 memcached),以免使我从中获取数据的服务器过载。问题出在获取缓存数据时。获取它工作正常,但随后 django 尝试解码数据(force_unicode),但失败并显示以下内容:

The string that could not be encoded/decoded was:  armv�rmare t

这是我用来缓存结果的内容(其中 result = suds-object)。使用cPickle(并尝试了pickle以防万一,但没有成功,这并不奇怪)。

泡沫响应采用 unicode 格式。

#Cache the result 
cache.set(hashstring, pickle.dumps(result), 120) 
#Return the cached data
result = cache.get(hashstring) 
if result: 
    return pickle.loads(result, encoding='utf-8')

最佳答案

Suds 响应无法轻松 pickle ,因为它们是动态生成的类。 Suds 使用 WSDL 为请求生成一个“架构”,通过该架构动态创建为每个方法量身定制的类。当您发出请求时,将创建此动态类的一个实例并用响应信息填充。恢复 pickled 类实例显然需要类本身,这就是 suds 的方法导致问题的地方,因为 pickle 不知道这些动态类。

一种方法是创建您自己的类来表示响应信息。您可以使用 suds 响应填充此类的实例,并且此类将很容易 pickle !

一旦信息可以pickle,就可以将其放入memcached中。

关于django - 缓存泡沫对象。统一码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325024/

相关文章:

python - “模块”对象没有属性 'PY2'

python - 如何在 Python 中动态分配 pickle 名称?

Python3 : two dictionaries with numpy vectors of different size consume the same amount of RAM

python - 使用多处理时 cv2.Boost 的 Pickle 异常

python - Django 使用模型字段的验证器进行客户端验证

wordpress - 是否有一个易于安装的自托管 wordpress 解决方案(可能有多个站点)

django - 具有两个 URL 和两个不同 SSL 证书的 Apache

nosql - Couchbase 服务器只能使用 RAM 内存吗?

django - 使用 Django session 存储登录用户

python - Django:暂时将所有 URL 重定向到一个 View