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

  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • michal lelkowski

    michal lelko

    9 Temmuz 2006
  • TechBalance

    TechBalance

    12 HAZİRAN 2011