J'essaie d'utiliser la fonction Pool.map() du multitraitement pour répartir le travail simultanément. Lorsque j'utilise le code suivant, cela fonctionne bien :
import multiprocessing
def f(x):
return x*x
def go():
pool = multiprocessing.Pool(processes=4)
#result = pool.apply_async(self.f, [10])
#print result.get(timeout=1)
print pool.map(f, range(10))
if __name__== '__main__' :
go()
Cependant, lorsque je l'utilise dans une approche plus orientée objet, cela ne fonctionne pas. Le message d'erreur qu'il donne est le suivant :
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup
__builtin__.instancemethod failed
Cela se produit lorsque mon programme principal est le suivant :
import someClass
if __name__== '__main__' :
# lfq = lastFmQueries.lastFmQueries()
# x = lfq.getUsersTopTracks("acet", "overall")
sc = someClass.someClass()
sc.go()
et ce qui suit est ma classe someClass :
import multiprocessing
class someClass(object):
def __init__(self):
pass
def f(self, x):
return x*x
def go(self):
pool = multiprocessing.Pool(processes=4)
#result = pool.apply_async(self.f, [10])
#print result.get(timeout=1)
print pool.map(self.f, range(10))
Quelqu'un sait-il quel pourrait être le problème, ou un moyen facile de le contourner ?