2011-01-29 59 views
2

如何在python中的任務負載中發送類對象?我想發送一個任務參數中的對象。
當我使用simplejson時,出現錯誤:Object is not serializable
當我使用泡菜時,我得到了KeyValue Error
如何做到這一點?Google App Engine有效載荷對象

這就是我想要序列

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' 
+0

你可以分享你試圖序列化的對象的定義嗎?我希望`鹹菜`工作順利。 – 2011-01-29 12:15:55

回答

3

的問題是與該被卸下的數據的類型。我鑄造它鍵入str和一切似乎正常工作。 我只是把它改爲

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

icfg = pickle.loads(str(icfg_compress)) # to unload 
0

這是一個部分我任務排隊服務。它只是將一個列表發佈到另一個任務上,將項目分解成可管理的部分。這只是它的一部分,但你應該爲你需要做的事情獲得大部分想法。

要保存:

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) 
+0

此方法僅適用於列表。它不適用於類對象 – Sam 2011-01-30 03:54:28

1

你看着的deferred library?它專門爲此設計,併爲您處理序列化和反序列化。