相关疑难解决方法(0)

多处理和莳萝可以一起做什么?

我想multiprocessing在Python中使用该库.遗憾地multiprocessing使用pickle不支持闭包,lambdas或函数的函数__main__.所有这三个对我来说都很重要

In [1]: import pickle

In [2]: pickle.dumps(lambda x: x)
PicklingError: Can't pickle <function <lambda> at 0x23c0e60>: it's not found as __main__.<lambda>
Run Code Online (Sandbox Code Playgroud)

幸运的是,有dill一个更健壮的泡菜.显然dill在导入时执行魔术以使泡菜工作

In [3]: import dill

In [4]: pickle.dumps(lambda x: x)
Out[4]: "cdill.dill\n_load_type\np0\n(S'FunctionType'\np1 ...
Run Code Online (Sandbox Code Playgroud)

这非常令人鼓舞,特别是因为我无法访问多处理源代码.可悲的是,我仍然无法得到这个非常基本的例子

import multiprocessing as mp
import dill

p = mp.Pool(4)
print p.map(lambda x: x**2, range(10))
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我错过了什么?究竟是multiprocessing+ dill组合的限制是什么?

JF塞巴斯蒂安的临时编辑

mrockli@mrockli-notebook:~/workspace/toolz$ python testmp.py 
    Temporary Edit for J.F Sebastian

mrockli@mrockli-notebook:~/workspace/toolz$ python testmp.py 
Exception …
Run Code Online (Sandbox Code Playgroud)

python pickle multiprocessing dill

44
推荐指数
2
解决办法
2万
查看次数

标签 统计

dill ×1

multiprocessing ×1

pickle ×1

python ×1