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

  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006
  • wowchick16

    wowchick16

    17 Mart 2007