我正在使用Python多處理模塊將對象放置到隊列中並讓它們由多個工作人員處理。我的第一個問題是綁定實例方法,我已經工作,但現在我遇到了一個單獨的問題,因爲這些對象使用的是__slots__
。python多處理pickle協議
當mp模塊去pickle的對象,它似乎是使用舊的ascii pickle協議,不能處理__slots__
。較新的協議處理這個,但我不知道如何使mp模塊使用此協議。
任何人都有這方面的經驗?
我正在使用Python多處理模塊將對象放置到隊列中並讓它們由多個工作人員處理。我的第一個問題是綁定實例方法,我已經工作,但現在我遇到了一個單獨的問題,因爲這些對象使用的是__slots__
。python多處理pickle協議
當mp模塊去pickle的對象,它似乎是使用舊的ascii pickle協議,不能處理__slots__
。較新的協議處理這個,但我不知道如何使mp模塊使用此協議。
任何人都有這方面的經驗?
如果它不能夠改變多包使用的鹹菜協議,然後定義__getstate__
和__setstate__
爲對象:
import pickle
class Foo(object):
__slots__ = ['this', 'that', 'other']
def __init__(self):
self.this = 1
self.that = 2
self.other = 3
def __getstate__(self):
return dict((name, getattr(self, name))
for name in self.__slots__)
def __setstate__(self, state):
for name, value in state.items():
setattr(self, name, value)
pickle.dumps(Foo(), protocol=0)
淘谷歌之後,我最終選擇了上述解決方案,實現了__getstate__和__setstate__方法。整個情節迫使我學習了許多關於Python的新東西。 – zchtodd
可以粘貼錯誤消息? – ktdrv
你使用什麼Python和/或多處理模塊版本? 2.7版本看起來像使用HIGHEST_PROTOCOL來酸洗。 – eswald
@eswald:同上。我試圖用我的2.7.1環境複製(徒勞)。 :) – ktdrv