Я получаю IOError: bad message length
при передаче больших аргументов функции map
. Как мне этого избежать? Ошибка возникает, когда я устанавливаю 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]])
func
загрузить соответствующее изображение, а не передавать его в качестве аргумента. Это определенно ошибка, о которой необходимо сообщить , но исправление не коснется вы скоро, и я не рекомендую использовать ночные сборки, если вы просто хотите кодировать - person Felipe Lema   schedule 31.07.2015IOError: bad message length
- person Padraic Cunningham   schedule 03.08.2015func
я вычисляю среднее значение всех изображений. - person Andy   schedule 05.08.2015