我正在使用multiprocessing
模块,我正在使用UpdateMessage
对象(我自己的类),通过发送multiprocessing.Queue
对象,用于进程之间的通信。这是课程:
class UpdateMessage:
def __init__(self, arrayref, rowslice, colslice, newval):
self.arrayref = arrayref
self.rowslice = rowslice
self.colslice = colslice
self.newval = newval
def do_update(self):
if self.arrayref == 'uL':
arr = uL
elif self.arrayref == 'uR':
arr = uR
else:
raise Exception('UpdateMessage.arrayref neither uL nor uR')
arr[self.rowslice, self.colslice] = self.newval
当我运行脚本时,它工作得很好。但是,当我用任一命令运行它时cProfile
or profile
,它给出以下错误:
_pickle.PicklingError: Can't pickle <class '__main__.UpdateMessage'>: attribute lookup __main__.UpdateMessage failed
它似乎试图破坏班级,但我不明白为什么会发生这种情况。我的代码没有这样做,没有它它也能正常工作,所以它可能是multiprocessing
模块。但为什么需要腌制UpdateMessage
,以及如何修复该错误?
编辑:这是发送的代码的一部分UpdateMessage
(脚本的多个部分都执行此操作,但都以相同的方式):
msg = UpdateMessage(uLref, refer[0] + marker[0] - 2,
slice(uL.shape[1]), ustar.copy())
queue.put(msg)
回溯并不是很有帮助:
Traceback (most recent call last):
File "/usr/lib/python3.2/multiprocessing/queues.py", line 272, in _feed
send(obj)