Объект полезной нагрузки Google App Engine - PullRequest
2 голосов
/ 29 января 2011

Как отправить объект класса в полезную нагрузку задачи в python?Я хочу отправить объект в параметрах задачи.
Когда я использую simplejson, я получаю ошибку: Object is not serializable.
Когда я использую рассол, я получаю KeyValue Error.
Каксделать это ?

Это класс, который я хочу сериализовать

class Matrix2D_icfg:
name = ""
indices = []
value = {}
def __init__(self,s):
    self.name = s
    self.indices = []
def __getitem__(self,i):
    self.indices.append(i)
    if len(self.indices)==2:
        (m,n) = self.indices
        self.indices = []
        if self.value.has_key(m*4276+n) == True :
            value = self.value[m*4276+n]
        else :
            value = 0
        return value
    else: return self

def __setitem__(self,i,value):
    self.indices.append(i)      
    if len(self.indices)==2:
        (m,n) = self.indices
        if value != 0 : self.value[m*4276+n] = value
        self.indices = []
    return self

icfg = Matrix2D_icfg("icfg") #declaring object
icfg_compress = pickle.dumps(icfg) #to pickle

icfg = pickle.loads(icfg_compress) # to unload

Я получаю следующую ошибку, когда передаю протравленный объект как полезную нагрузку и выгружаю его позже

File "/Users/praveensekar/myFYP/gaecode/pknots4d.2.3/pknots.py", line 439, in post
    icfg = pickle.loads(icfg_compress)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pickle.py", line 1374, in loads
    return Unpickler(file).load()
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pickle.py", line 858, in load
    dispatch[key](self)
KeyError: '\x00'  

Ответы [ 3 ]

3 голосов
/ 30 января 2011

Проблема была с типом данных, которые были выгружены. Я набрал это, чтобы набрать str, и все, казалось, работало правильно. Я просто изменил его на

icfg = Matrix2D_icfg("icfg") #declaring object
icfg_compress = pickle.dumps(icfg) #to pickle

icfg = pickle.loads(str(icfg_compress)) # to unload
1 голос
/ 31 января 2011

Вы смотрели на отложенную библиотеку ?Он разработан именно для этого и заботится о сериализации и десериализации для вас.

0 голосов
/ 29 января 2011

Это часть моей службы очередей заданий. Он просто публикует список в другой задаче, чтобы разбить проект на управляемые части. Это всего лишь часть этого, но вы должны получить большую часть идеи о том, что вам нужно делать.

Чтобы сохранить это:

from django.utils import simplejson as json

.... stuff happens

index = 0
            current_list = []
            while index < len(item_list):
                if index+500 < len(item_list):
                    for item in item_list[index:index+500]:
                        current_list.append(item.item_number)
                    jsondump = json.dumps(current_list)
                    taskqueue.add(url = '/queuer', 
                                  headers = {'Content-Type':'application/json'},
                                  payload = jsondump)

Чтобы загрузить его:

from django.utils import simplejson as json

    class TaskQueuer(webapp.RequestHandler):
    def post(self):
        request = self.request.body
        task_list = json.loads(request)
...