2009-10-23 1 views
2

Я пытаюсь вручную установить объект в API кеша Django, но он не работает (я думаю, из-за травления?) Объект предоставлен мне третьим лицом, мой код:Установка объекта в API кэша Django завершилась неудачно из-за ошибки pickle

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, и мне интересно, как лучше решить эту проблему, мне нужно солить что-то в первую очередь?

ответ

2

Похоже, что вам необходимо установить ElementTree, так как операция pickle пытается и не может импортировать модуль etree.

UPDATE: Если вы посмотрите на него дальше, пытаетесь ли вы кэшировать узлы документа? Если вы пытаетесь кэшировать данные с узла, вам, вероятно, потребуется выполнить некоторую обработку значения, которое вы в настоящее время сохраняете в user_list.

+0

Вы были правы, мне пришлось изменить тип данных, которые мы пытались кэшировать, в обычный список python. –

Смежные вопросы