【发布时间】:2018-08-24 12:49:51
【问题描述】:
我正在尝试并行化我的任务并决定使用多处理 (mp) 模块。 我很快就知道 mp 不能处理嵌套函数,所以我不得不取消嵌套类似这样的函数:
def foo(nomer1, nomer2):
def bar(nomer1, nomer2):
return ([nomer1] * nomer2)
return(bar(nomer1, nomer2))
到这里:
def bar(nomer1, nomer2):
return([nomer1]*nomer2)
def foo(nomer1, nomer2):
return(bar(nomer1, nomer2))
但是,当我运行时:
import multiprocessing as mp
n_proc = 2
pool = mp.Pool(processes=n_proc)
pool.starmap(foo, [11, 2])
控制台产生这个错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Users\user\Anaconda2\envs\env1\lib\multiprocessing\pool.py", line 274, in starmap
return self._map_async(func, iterable, starmapstar, chunksize).get()
File "C:\Users\user\Anaconda2\envs\env1\lib\multiprocessing\pool.py", line 644, in get
raise self._value
File "C:\Users\user\Anaconda2\envs\env1\lib\multiprocessing\pool.py", line 424, in _handle_tasks
put(task)
File "C:\Users\user\Anaconda2\envs\env1\lib\multiprocessing\connection.py", line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "C:\Users\user\Anaconda2\envs\env1\lib\multiprocessing\reduction.py", line 51, in dumps
cls(buf, protocol).dump(obj)
_pickle.PicklingError: Can't pickle <function foo at 0x00000189D37902F0>: attribute lookup foo on __main__ failed
Foo 位于最顶层,如 documentation 中所指定,但 mp 仍然无法腌制它。 我该如何解决这个问题,最好不安装额外的软件包?
【问题讨论】:
标签: python parallel-processing multiprocessing pickle