İş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
5
A
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)
bu şekilde çoklu diş kullanmak için kodunuzu yazmaya çalışıyorsunuz ? –
Çok işlemli. –