多处理和酸洗绑定对象

时间:2019-06-10 16:41:32

标签: python multiprocessing jupyter-notebook

我知道在Mac和Windows上python的multiprocessing的方式有所不同;例如:

这些帖子似乎暗示问题在于如何腌制不在其模块中的功能,尽管this answer更为具体,并指出问题与绑定方法

在Windows上,我可以启动Jupyter Notebook,并在其中定义我定义的功能:

import pickle
def test(): return None
pickle.dumps(test)

并返回b'\x80\x03c__main__\nt\nq\x00.' (正如预期的那样,这也可以直接在标准的交互式python会话中使用)。

但是,将其包装在多处理器调用中确实会产生错误(在笔记本和终端中):

> import multiprocessing as mp
> def test(): return None
> p = mp.Pool(processes=2)
> p.map(test, range(2))
AttributeError: Can't get attribute 'test' on <module '__main__' (built-in)>

这在Mac上的交互式会话中确实有效(尽管交互式定义的函数需要一个参数来防止出现TypeError: test() takes 0 positional arguments but 1 was given.错误)

这必须表示我不完全了解多处理的作用-我以为这只是对对象进行酸洗,但是鉴于我可以对笔记本中定义的对象进行酸洗,因此多处理必须做的还不止这些。有人可以填补我的理解空白吗?!

0 个答案:

没有答案