SORU
29 Kasım 2009, Pazar


'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
29 Kasım 2009, Pazar


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dirkgently1

    dirkgently1

    13 NİSAN 2006
  • DorkmanScott

    DorkmanScott

    14 NİSAN 2006
  • Lena Danya

    Lena Danya

    11 NİSAN 2010