2011-10-27 28 views
13

Bir kuyrukta üzerine nesneleri yerleştirmek ve onları birkaç işçiler tarafından işlenen olması Python çoklu işlem modülü kullanıyorum. Benim ilk konu ben çalışma var turşu bağlı örnek yöntemleri, başlamıştı, ama şimdi nesneler __slots__ kullanıyor olmasından kaynaklanan ayrı bir konu haline çalıştırıyorum. O __slots__ işleyemez piton çoklu işlem turşu protokol

mp modülü nesneleri turşu gider

, bu eski ASCII turşu protokolünü kullanarak gibi görünüyor. Yeni protokol bunu halleder, ancak mp modülünün bu protokolü nasıl kullanacağından emin değilim.

Herkes bu konuda herhangi bir deneyime sahip? o çoklu işlem paket kullanan turşu protokolü değiştirmek mümkün değilse

+0

Hata iletisini yapıştırmak miyim? – ktdrv

+6

Ne Python ve/veya kullandığınız modül versiyonunu mutiprocessing? Sürüm 2.7 dekapaj için 'HIGHEST_PROTOCOL' kullanır gibi görünüyor. – eswald

+0

@eswald: Ditto. 2.7.1 ortamımı kullanarak bunu (boşuna) çoğaltmaya çalışıyordum. :) – ktdrv

cevap

10

, sonra nesneler için __getstate__ ve __setstate__ tanımlayın:

import pickle 

class Foo(object): 
    __slots__ = ['this', 'that', 'other'] 

    def __init__(self): 
     self.this = 1 
     self.that = 2 
     self.other = 3 

    def __getstate__(self): 
     return dict((name, getattr(self, name)) 
        for name in self.__slots__) 

    def __setstate__(self, state): 
     for name, value in state.items(): 
      setattr(self, name, value) 

pickle.dumps(Foo(), protocol=0) 
+0

Google'ı Temizleme sonra ben __getstate__ ve __setstate__ yöntemlerinin uygulanması, yukarıda çözelti ile gidiş sona erdi. Bu bölüm genel olarak Python hakkında genel olarak birçok yeni şey öğrenmeye zorladı. – zchtodd

İlgili konular