【发布时间】:2017-07-25 04:31:57
【问题描述】:
我正在寻找一种通用方法来将多处理模块用于其参数已由位置或关键字类型 (https://docs.python.org/2/glossary.html#term-parameter) 定义的函数。
下面是我如何解决问题的简单示例
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 函数不能与多处理池一起使用)
谢谢
【问题讨论】:
标签: python python-2.7 multiprocessing