Object 在pickle中:如何序列化遗留对象以提交给Python多处理池

Object 在pickle中:如何序列化遗留对象以提交给Python多处理池,object,multiprocessing,pickle,legacy,Object,Multiprocessing,Pickle,Legacy,我已经编写了一个很好的并行作业处理器,它接受作业(函数、它们的参数、超时信息等),然后提交给Python池。如果需要,我可以提供完整(长)代码,但关键步骤(如我所见)是池的异步应用程序: job.resultGetter = self.pool.apply_async( func = job.workFunction, kwds = job.workFunctionKeywordArguments ) 我试图将此并行作业处理器与大量遗留代码一起使用,可能很自然地遇到了问题: P

我已经编写了一个很好的并行作业处理器,它接受作业(函数、它们的参数、超时信息等),然后提交给Python池。如果需要,我可以提供完整(长)代码,但关键步骤(如我所见)是池的异步应用程序:

job.resultGetter = self.pool.apply_async(
    func = job.workFunction,
    kwds = job.workFunctionKeywordArguments
)
我试图将此并行作业处理器与大量遗留代码一起使用,可能很自然地遇到了问题:

PicklingError: Can’t pickle <type ’instancemethod’>: attribute lookup builtin .instancemethod failed
PicklingError:无法pickle:属性查找内置项。instancemethod失败

当我试图提交一个有问题的对象作为功函数的参数时,可以观察到这种类型的问题。真正的问题是,这是遗留代码,有人建议我只能对其进行非常小的更改。所以是否有一些巧妙的技巧或简单的修改可以让我的并行作业处理器代码处理这些传统上不可拼接的对象?我完全可以控制并行作业处理器代码,所以我愿意(比如)将每个提交的函数包装到另一个函数中。对于遗留代码,我应该能够将偶尔的小方法添加到对象中,但仅此而已。有什么聪明的方法解决这类问题吗?

使用
dill
pathos.multi-processing
而不是
pickle
multi-processing

请看这里:


非常感谢您的建议。不幸的是,我的局限性在于,
多处理
在我参与的工作中被认为是“有效的”,而对它的更现代的更新和类似的并行处理方法则没有。然而,我将进行实验。谢天谢地,您可以为多处理分支提供一个案例,因为它只是多处理的一个较旧版本,该模块的序列化尝试中有一两行被抽出并替换为一行“import dill”。Dill主要是python的pickle,带有一些注册到pickle注册表的附加序列化方法。然而,听起来这并不能帮助您将它们视为“已验证”——是否将“已验证”转换为“标准python库”或类似“EPD/Anaconda”的内容?