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

  • Blue Lightning TV

    Blue Lightni

    9 EKİM 2011
  • DRDAnimation

    DRDAnimation

    28 EYLÜL 2012
  • GALERNAYA20

    GALERNAYA20

    19 NİSAN 2011