我正在寻找一种通用的方法来使用多处理模块来处理参数已由位置或关键字类型(https://docs.python.org/2/glossary.html#term-parameter)定义的函数。如何在python多处理模块中使用部分函数?
下面,是我是如何处理的问题
from functools import partial
from multiprocessing import Pool
def VariadicLifter(func, args):
return func(*args)
def func(x,y,z,a):
return x+2*y+3*z+4*a
if __name__ == '__main__':
func_ = partial(func, 500, 1007)
lfunc_ = partial(VariadicLifter, func_)
RANGE = zip(range(10,31),range(10,31))
pool = Pool(processes=6)
result_array = pool.map(lfunc_, RANGE)
pool.close()
pool.join()
这个工作一个简单的例子: lfunc_的每次通话的结果是result_array可用。
现在,我试图在另一个上下文中应用此模式,并收到错误消息。
File "c:\Python27\lib\multiprocessing\pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "c:\Python27\lib\multiprocessing\pool.py", line 567, in get
raise self._value
cPickle.PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
但如果我用普通映射替换多处理映射,程序没有问题运行。 多处理池的函数参数是否有任何限制? (我的理解是,至少,lambda函数不能与多池使用)
感谢