Não é possível pickle <tipo 'instancemethod'> ao usar o multiprocessamento Pool.map ()
Estou tentando usarmultiprocessing
'sPool.map()
função para dividir o trabalho simultaneamente. Quando eu uso o seguinte código, funciona bem:
import multiprocessing
def f(x):
return x*x
def go():
pool = multiprocessing.Pool(processes=4)
print pool.map(f, range(10))
if __name__== '__main__' :
go()
No entanto, quando eu usá-lo em uma abordagem mais orientada a objetos, ele não funciona. A mensagem de erro é:
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup
__builtin__.instancemethod failed
Isso ocorre quando o seguinte é meu programa principal:
import someClass
if __name__== '__main__' :
sc = someClass.someClass()
sc.go()
e o seguinte é meusomeClass
classe:
import multiprocessing
class someClass(object):
def __init__(self):
pass
def f(self, x):
return x*x
def go(self):
pool = multiprocessing.Pool(processes=4)
print pool.map(self.f, range(10))
Alguém sabe o que o problema poderia ser, ou uma maneira fácil de contornar isso?