繁体   English   中英

使用Multiprocessing在Python中制作并行版本的map函数时出现pickle错误

[英]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.partialoperator.add一起使用:

import functools
import operator

map_parallel(functools.partial(operator.add, 3), range(100))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM