[英]Pickle error when making parallel version of map function in Python using Multiprocessing
我正在遵循有关python的简单基于进程的并行映射的答案? 使用Python 3.6.1
。 我正在尝试使用与使用常规map
函数相同的确切方法。 为什么会这样? 如何创建用于lambda
的并行map
函数?
def map_parallel(func, iterable, n_jobs=-1):
if n_jobs == -1:
n_jobs = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes=n_jobs)
return pool.map(func, iterable)
map_parallel(lambda x: x + 3, range(100))
PicklingError: Can't pickle <function <lambda> at 0x185284f28>: attribute lookup <lambda> on __main__ failed
多处理泡菜对象在过程之间传递。 lambda
不可序列化(请参阅什么可以腌制和未腌制? ); 它不能在进程之间传递。
您需要定义一个函数并将其传递。
def add3(n):
return n + 3
map_parallel(add3, range(100))
或者在这种情况下,可以将functools.partial
与operator.add
一起使用:
import functools
import operator
map_parallel(functools.partial(operator.add, 3), range(100))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.