【发布时间】:2017-04-06 09:39:54
【问题描述】:
在方法上使用 multiprocessing 会收到错误声明 self.methods cannot be pickled。
为了克服这个问题,我使用了:
def _pickle_method(m):
if m.im_self is None:
return getattr, (m.im_class, m.im_func.func_name)
else:
return getattr, (m.im_self, m.im_func.func_name)
copy_reg.pickle(types.MethodType, _pickle_method)
现在我搜索了这个,但仍有几个问题不清楚:
- 为什么
self.methods不能腌制? -
copy_reg.pickle()是如何工作的?它如何启用self.methods的酸洗? - 使用这种方法是否有负面影响,或者还有其他更好的方法吗?
更多信息:
我在一个类中有一个函数,该函数用于执行 request.get 和 request.post。为了提高时间,我在它上面使用了多处理。
这正是我面临的问题。
【问题讨论】:
-
如果没有更多信息,很难理解为什么
pickle会尝试序列化一个实际的类方法(pickle不是这样做的)——所以这是可能的答案是“如果你需要这样做,那么你做错了其他事情。”请edit您的问题并添加更多上下文。 -
self.methods到底是什么?如果可能,请使用执行request.get和request.post(以及相关的多处理)的方法来展示该类。 -
@martineau 我只是使用了 self.mathods 这个名字......它们只是任何采用 self 的类方法......代码可以在链接的 SO 帖子中找到...... .相同或相似
标签: python pickle python-multiprocessing