2014-09-26 31 views
8

Çok çekirdekli işlemci ile hızlandırmak için hesaplamaları ayrı işlemlere atamak için Python'un patentlerini kullanmaya çalışıyorum. Ben multiprocessing.Pool ile dekapaj sorunları vardı gibiPathos ile Python çoklu işleme

class: 
    def foo(self,name): 
    ... 
    setattr(self,name,something) 
    ... 
    def boo(self): 
     for name in list: 
     self.foo(name) 

, ben pathos denemeye karar verdi: gibi Kodum düzenlenmiştir.

import pathos.multiprocessing 

ama hata ile sonuçlandı: önceki konularda önerildiği gibi ben denedim hiçbir modül çoklu işlem - Ben en son pathos sürümünü bulamıyorum. Benim sınıf örneği herhangi yeni özelliklere sahiptir -

def boo(self): 
import pathos 
pathos.pp_map.pp_map(self.foo,list) 

Şimdi atılan hiçbir hata yoktur, ancak foo çalışmaz:

Sonra boo yöntemi değiştirmek çalıştı. Lütfen bana yardım edin, çünkü bir sonraki hareketten sonra, bir gün sonra nereye gideceğimi bilmiyorum.

cevap

17

Ben pathos yazarıyorum. Yukarıdaki koddan ne yapmak istediğinden emin değilim. Ancak, biraz ışık tutabilirim.

>>> from pathos.multiprocessing import ProcessingPool 
>>> class Bar: 
... def foo(self, name): 
...  return len(str(name)) 
... def boo(self, things): 
...  for thing in things: 
...  self.sum += self.foo(thing) 
...  return self.sum 
... sum = 0 
... 
>>> b = Bar() 
>>> results = ProcessingPool().map(b.boo, [[12,3,456],[8,9,10],['a','b','cde']]) 
>>> results 
[6, 4, 5] 
>>> b.sum 
0 

Yani yukarıda ne olur, b.boo iç içe listelerin her biri için yeni bir piton sürecine geçti ve ardından değerlendirilir nerede Bar örneği b ait boo yöntemi denir olmasıdır: İşte bazı benzer kod. Sonuçların doğru olduğunu görebilirsiniz… len ("12") + len ("3") + len ("456") 6, vb. Bununla birlikte, b.sum'a baktığınızda gizemli bir şekilde hala 0 olduğunu da görebilirsiniz. b.sum neden hala sıfır? Peki, multiprocessing (ve ayrıca pathos.multiprocessing), diğer python işlemine geçtiğiniz her ne olursa olsun KOPYA'u yapar. Daha sonra kopyalanan örnek daha sonra (paralel olarak) çağrılır ve hangi sonuçların arandığını döndürür. yöntem çağrıldı. RETURN sonuçlarına sahip olmanız veya bunları yazdırmanız veya bir dosyaya göndermeniz veya başka bir şekilde göndermeniz gerektiğini unutmayın. Beklediğiniz gibi orijinal örneğe geri dönemezler çünkü diğer işlemcilere gönderilen orijinal örnek değildir. Örneğin kopyaları oluşturulur, ardından atılır - bunların her biri sum özniteliğini artırdı, ancak orijinal "b.süm" el değmemiş. Ancak var

Tahmin edebileceğiniz gibi yukarıdaki çalışması gibi bir şey yapmak için pathos içinde planlar - Orijinal nesne güncellenen IS nerede, ancak henüz böyle çalışmaz.

DÜZENLEME: Eğer pip ile kuruyorsanız, pathos en son yayımlanan sürümü birkaç yaşındadır ve doğru yüklemek olmayabilir veya Altmodüllerin tüm yüklemek unutmayın. Yeni bir pathos sürümü beklemede, ancak o zamana kadar, kodun en son sürümünü github'dan almak ve oradan yüklemek daha iyidir. Gövde, geliştirme aşamasında çoğunlukla istikrarlıdır. Sorununuz, tüm yeni paketlerin "yeni" pip - "eski" pathos yüklemeden kaynaklanan uyumsuzluk nedeniyle yüklenmemiş olabileceğini düşünüyorum. pathos.multiprocessing eksik ise, bu en büyük suçludur.

burada github dan pathos alın:

+0

https://github.com/uqfoundation/pathos Burada OP ile aynı sorun var. Ben ithalat pathos' yapabilirim, ancak 'import pathos.multiprocessing' bana bir modül bulunamadı hatası veriyor. Bunun nedeni ne olabilir? – sashkello

+0

Sorun şu ki, OP'nin sorusunu anlamıyorum… ingilizcede bazı engeller ve en az kod örnekleri nedeniyle. Belki başka bir yaklaşım deneyebilirim. Belki de tüm bağımlılıklar yüklenmemişti. İşlemi yapabilir misin? 'Import.pool içe aktarma havuzundan 'ne dersiniz? Pathos.helpers 'dan mp_helper' veya 'pathos.helpers import ProcessPool' 'ifadesi nedir? Pp_helper 'pp_helper' ithalatından pp' ve 'pp_helper'den ne haber? Pathos.helpers'dan gelen –

+0

'*," Yardımcı olarak adlandırılan modül yok "şeklindedir. Her nasılsa, tüm çekinceler benim için uygun değil ve OP görünüyor. Pipetten kurdum, en son versiyon. – sashkello

İlgili konular