你可以使用pathos.multiprocessing
,这是一个分叉multiprocessing
使用的是dill
序列化器而不是pickle
. dill
可以序列化Python中的几乎任何东西。然后,无需编辑您的代码。
>>> from pathos.multiprocessing import ProcessingPool as Pool
>>>
>>> def calculate(x):
... def domath(y):
... return x*y
... return Pool().map(domath, range(3))
...
>>> calculate(2)
[0, 2, 4]
你甚至可以对它发疯……因为大多数东西都是腌制的。不需要你必须用纯来烹饪的奇怪的非Pythonic解决方案multiprocessing
.
>>> class Foo(object):
... def __init__(self, x):
... self.x = x
... def doit(self, y):
... return ProcessingPool().map(self.squared, calculate(y+self.x))
... def squared(self, z):
... return z*z
...
>>> def thing(obj, y):
... return getattr(obj, 'doit')(y)
...
>>> ProcessingPool().map(thing, ProcessingPool().map(Foo, range(3)), range(3))
[[0, 0, 0], [0, 4, 16], [0, 16, 64]]
Get pathos
here: https://github.com/uqfoundation https://github.com/uqfoundation