't turşu <type ''> instancemethod;'In python kullanırken çoklu Havuzu.()göster
Çoklu Havuzu kullanmaya çalışıyorum.() harita fonksiyonu iş aynı anda bölmek için. Aşağıdaki kodu kullanıyorum, gayet iyi çalışıyor:
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()
Nesneye yönelik daha fazla bir yaklaşım içinde kullanıyorum ancak işe yaramıyor. Veriyor hata mesajı:
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup
__builtin__.instancemethod failed
Bu aşağıdaki benim ana programdan oluşur:
import someClass
if __name__== '__main__' :
sc = someClass.someClass()
sc.go()
ve aşağıdaki someClass sınıfım
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))
Herkes sorunun ne olduğunu, ya da bunu çözmenin kolay bir yolu?
CEVAP
Sorun çoklu işlemler şeyler arasında onları sapan turşu olduğunu ve bağımlı yöntemler değil picklable. Geçici (olup olmadığını düşünün "kolay" veya değil;-) Ekle altyapı programı için izin bu tür yöntemler için salamura, kayıt ile copy_reg standart kütüphane yöntemi.
Örneğin, this thread Steven Bethard katkısı (iş parçacığı sonuna doğru) mükemmel uygulanabilir yöntem copy_reg
)/unpickling turşu izin veren bir yaklaşım gösterir.
Python Çoklu işlem.Uygulamak, apply_as...
Çoklu havuzu Python.birden çok bağımsı...
Çoklu iş parçacığı havuzu Havuza benze...
Nasıl Python çoklu kullanırken günlük ...
Klavye'çoklu Havuzu s python ile ...