2009-04-11 37 views
5

İşlem sınıfını, bir sınıf I EdgeRenderer olarak sınıflandırıyorum. Normal İşlemler yerine, multiprocessing.Pool kullanmak istiyorum, onların EdgeRenderer'ımın örneklerini olmasını istiyorum. Mümkün? Nasıl?Python çoklu işlem: Özel İşlemler havuzu

+0

bu şekilde çoklu diş kullanmak için kodunuzu yazmaya çalışıyorsunuz ? –

+0

Çok işlemli. –

cevap

3

: Alternatif olarak, eşleme için kullanmak çağrılabilir nesnesine işlevselliğini inşa edebilirsiniz Halen API desteklenmez, ancak bir kötü olmazdı

ilave. I/2.6.3 3.1 Bu hafta python2.7 eklemeden bakacağız

Bu iş gibi görünüyor
2

API'da bunun için herhangi bir kanca göremiyorum. initializer ve initargs bağımsız değişkenini kullanarak istediğiniz işlevselliği çoğaltabilirsiniz. Jesse Nöller itibaren

class EdgeRenderTask(object): 
    def op1(self,*args): 
     ... 
    def op2(self,*args): 
     ... 
p = Pool(processes = 10) 
e = EdgeRenderTask() 
p.apply_async(e.op1,arg_list) 
p.map(e.op2,arg_list) 
+0

Sınıfı argüman olarak geçemezsiniz, p.map', turşu hatası alırsınız. Bunun etrafında bulduğum tek yol, özel bir 'pool.map' türünü uygulamaktır. Maalesef daha fazla hat alacak. – catwalker333

2

:

import multiprocessing as mp 

ctx = mp.get_context() # get the default context 

class MyProcess(ctx.Process): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     print("Hi, I'm custom a process") 

ctx.Process = MyProcess # override the context's Process 

def worker(x): 
    print(x**2) 

p = ctx.Pool(4) 
nums = range(10) 
p.map(worker, nums) 
İlgili konular