当我向map
函数传递大参数时,出现了IOError: bad message length
错误。我该如何避免?当N=1500
或更大时会发生此错误。
代码如下:
import numpy as np
import multiprocessing
def func(args):
i=args[0]
images=args[1]
print i
return 0
N=1500 #N=1000 works fine
images=[]
for i in np.arange(N):
images.append(np.random.random_integers(1,100,size=(500,500)))
iter_args=[]
for i in range(0,1):
iter_args.append([i,images])
pool=multiprocessing.Pool()
print pool
pool.map(func,iter_args)
在multiprocessing
的文档中有一个名为recv_bytes
的函数会引发IOError异常。这可能是因为它导致的吗?(详情请见https://python.readthedocs.org/en/v2.7.2/library/multiprocessing.html)
编辑
如果我使用images
作为numpy数组而不是列表,我会得到另一个错误:SystemError: NULL result without error in PyObject_Call
。以下是稍微不同的代码:import numpy as np
import multiprocessing
def func(args):
i=args[0]
images=args[1]
print i
return 0
N=1500 #N=1000 works fine
images=[]
for i in np.arange(N):
images.append(np.random.random_integers(1,100,size=(500,500)))
images=np.array(images) #new
iter_args=[]
for i in range(0,1):
iter_args.append([i,images])
pool=multiprocessing.Pool()
print pool
pool.map(func,iter_args)
编辑2 我使用的实际函数是:
def func(args):
i=args[0]
images=args[1]
image=np.mean(images,axis=0)
np.savetxt("image%d.txt"%(i),image)
return 0
此外,iter_args
中不包含相同的图像集:
iter_args=[]
for i in range(0,1):
rand_ind=np.random.random_integers(0,N-1,N)
iter_args.append([i,images[rand_ind]])
IOError: bad message length
。 - Padraic Cunningham