2009-04-11 13 views
5

Podklasy klasy Process, do klasy I nazywam EdgeRenderer. Chcę użyć multiprocessing.Pool, chyba że zamiast zwykłych procesów, chcę, aby były instancjami mojego EdgeRenderer. Możliwy? W jaki sposób?Python multiprocessing: Pula niestandardowych procesów

+0

Czy próbujesz napisać kod w użyciu wielu wątków w ten sposób ? –

+0

Multi-przetwarzanie. –

Odpowiedz

3

Od Jesse Nollera:

To nie jest obecnie obsługiwana w API, ale nie byłby zły dodanie. będę patrzeć na dodanie go do python2.7/2.6.3 3.1 w tym tygodniu

2

Nie widzę żadnego haka w interfejsie API. Możesz być w stanie uciec się z replikacją żądanej funkcjonalności za pomocą argumentu initializer i initargs. Alternatywnie, można zbudować funkcjonalności do na żądanie obiektu, który służy do mapowania:

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

Nie możesz przekazać klasy jako argumentu do 'p.map', dostaniesz błąd pikla. Jedynym sposobem, jaki udało mi się znaleźć, jest zaimplementowanie niestandardowego 'pool.map' .... samodzielnego konfigurowania i ładowania procesów. Niestety zajmie to więcej linii. – catwalker333

2

To wydaje się działać:

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)