在Django缓存API中设置对象失败,因pickle错误

2 投票
1 回答
1182 浏览
提问于 2025-04-15 15:19

我正在尝试手动将一个对象放入Django的缓存API中,但失败了(我觉得可能是因为序列化的问题?)这个对象是由第三方提供给我的,我的代码是:

def index(request, template_name="mytemplate.htm"):
    user_list = cache.get("user_list_ds")
    if user_list is None:
            # this is the expensive bit I'm trying to cache
            # given to me by a third part
        user_list = graffiti.user_list("top", 100).responseObj().blocks()
        cache.set("user_list_ds", user_list, 10*60) # 10 minutes

    return render_to_response(template_name, { 'user_list' : user_list,}, context_instance = RequestContext(request))

当我运行这段代码时,出现了一个错误:

Can't pickle <type 'etree._Element'>: import of module etree failed
in -    cache.set("user_list_ds", user_list, 10*60) # 10 minutes 

我对Python非常陌生,想知道该如何解决这个问题,我需要先进行序列化吗?

1 个回答

2

看起来你需要安装ElementTree,因为pickle操作在尝试导入etree模块时失败了。

更新:进一步看,你实际上是在尝试缓存文档节点吗?如果你是想缓存节点中的数据,那么你可能需要对目前存储在user_list中的值进行一些处理。

撰写回答