Nie można wytrawiać <typ „instancemethod”> podczas korzystania z wieloprocesorowego Pool.map
Próbuję użyćmultiprocessing
jestPool.map()
funkcja podziału pracy jednocześnie. Kiedy używam następującego kodu, działa poprawnie:
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()
Jednak gdy używam go w podejściu bardziej zorientowanym obiektowo, nie działa. Wyświetlany komunikat o błędzie:
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup
__builtin__.instancemethod failed
Dzieje się tak, gdy następujący program jest moim głównym programem:
import someClass
if __name__== '__main__' :
sc = someClass.someClass()
sc.go()
a następne jest mojesomeClass
klasa:
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))
Czy ktoś wie, na czym polega problem, czy też jest to łatwy sposób?