【发布时间】:2017-01-28 06:20:54
【问题描述】:
如果您打开 Jupyter Notebook 并运行以下命令:
import multiprocessing
def f(x):
a = 3 * x
pool = multiprocessing.Pool(processes=1)
global g
def g(j):
return a * j
return pool.map(g, range(5))
f(1)
你会得到以下错误
Process ForkPoolWorker-1:
Traceback (most recent call last):
File "/Users/me/anaconda3/lib/python3.5/multiprocessing/process.py", line 249, in _bootstrap
self.run()
File "/Users/me/anaconda3/lib/python3.5/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/Users/me/anaconda3/lib/python3.5/multiprocessing/pool.py", line 108, in worker
task = get()
File "/Users/me/anaconda3/lib/python3.5/multiprocessing/queues.py", line 345, in get
return ForkingPickler.loads(res)
AttributeError: Can't get attribute 'g' on <module '__main__'>
我正在尝试了解这是错误还是功能。
我正在尝试让它工作,因为在我的真实案例中 f 基本上是一个易于并行化的 for 循环(每次迭代只需更改一个参数)但每次迭代都需要大量时间!我是正确地解决问题还是有更简单的方法? (注意:在整个 notebook 中,f 本身会被调用多次,参数不同)
【问题讨论】:
标签: python-3.x multiprocessing jupyter-notebook python-multiprocessing