gpt4 book ai didi

python - 分析多进程 Python 脚本时出现神秘的 pickle 错误

转载 作者:太空狗 更新时间:2023-10-30 00:57:06 26 4
gpt4 key购买 nike

<分区>

我正在使用 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

当我运行脚本时,它运行得非常好。但是,当我使用 cProfileprofile 运行它时,会出现以下错误:

_pickle.PicklingError: Can't pickle <class '__main__.UpdateMessage'>: attribute lookup __main__.UpdateMessage failed

它似乎是在试图 pickle 类,但我不明白为什么会这样。我的代码没有这样做,没有它它也能正常工作,所以它可能是 multiprocessing 模块。但为什么它需要 pickle 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)

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com