gpt4 book ai didi

python - 使用多处理时出现奇怪的 unpickling 错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:13 24 4
gpt4 key购买 nike

使用多处理时出现以下错误:

Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.6/multiprocessing/pool.py", line 282, in _handle_results
task = get()
UnpicklingError: NEWOBJ class argument has NULL tp_new

我完全不知道这是什么意思,尽管在 C 级别听起来有些不对劲。任何人都可以阐明这一点吗?

更新:好的,所以我想出了如何解决这个问题。但我还是有点困惑。我正在返回此类的一个实例:

class SpecData(object):
def __init__(self, **kwargs):
self.__dict__.update(**kwargs)
def to_dict(self):
return self.__dict__

如果我返回这个对象的一个​​实例,我会得到错误。但是,如果我调用 to_dict 并返回字典,它就可以工作。我做错了什么?

最佳答案

尝试使用 pickle 模块而不是 cPickle 模块 -- pickle 是用纯 Python 编写的,通常它会给出更有用的错误消息比 cPickle。 (尽管有时我不得不求助于制作 pickle.py 的本地副本,并在错误位置附近添加一些调试 printf 语句以找出问题所在。)

找到问题后,您可以切换回 cpickle。

(我不太熟悉 multiprocessing 模块,所以我不确定你是在做 pickling 还是在做。如果是,那么使用 pickle 而不是 cpickle 的最简单方法可能在导入多处理/线程模块之前做一些猴子修补:import sys, pickle; sys.modules['cPickle']=pickle)

关于python - 使用多处理时出现奇怪的 unpickling 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1953261/

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