【发布时间】:2019-05-21 19:54:06
【问题描述】:
我尝试在本地定义的函数上运行并行处理,如下所示:
import multiprocessing as mp
import numpy as np
import pdb
def testFunction():
x = np.asarray( range(1,10) )
y = np.asarray( range(1,10) )
def myFunc( i ):
return np.sum(x[0:i]) * y[i]
p = mp.Pool( mp.cpu_count() )
out = p.map( myFunc, range(0,x.size) )
print( out )
if __name__ == '__main__':
print( 'I got here' )
testFunction()
当我这样做时,我收到以下错误:
cPickle.PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
如何使用多处理来并行处理多个数组,就像我在这里尝试做的那样? x 和 y 必须在函数内部定义;我宁愿不让它们成为全局变量。
感谢所有帮助。
【问题讨论】:
-
我认为您对多处理的工作方式存在误解 - map 调用的函数将在没有函数本地数据概念的单独进程中执行。您必须将要处理的数据传递给将要处理它的函数,或者在 map 参数中显式传递数据,或者通过例如传递数据。排队。
-
@barny 如何传递数据?请注意,我不需要更改 x 或 y;我只需要使用它们。
-
您是否阅读过文档,例如docs.python.org/3/library/multiprocessing.html - 你可以试试共享内存,也许吧?否则,您必须将要操作的数据显式发送到每个进程。
-
@barny 我已阅读文档,但我正在努力解决。如何使用共享内存?如何将数据显式发送到每个进程?
标签: python parallel-processing python-multiprocessing