2009-04-11 13 views
5

Estoy subclasificando la clase Process, en una clase que llamo EdgeRenderer. Quiero usar multiprocessing.Pool, excepto que en lugar de Procesos normales, quiero que sean instancias de mi EdgeRenderer. ¿Posible? ¿Cómo?Multiproceso de Python: conjunto de procesos personalizados

+0

¿Estás tratando de escribir el código para utilizar múltiples subprocesos de esta manera ? –

+0

Procesamiento múltiple. –

Respuesta

3

De Jesse Noller:

No se admite actualmente en la API , pero no sería una mala adición. Voy a mirar a añadirla a python2.7/2.6.3 3.1 esta semana

2

No veo ningún gancho en la API. Es posible que pueda salirse con la suya replicando su funcionalidad deseada usando el argumento initializer y initargs. Alternativamente, se puede construir la funcionalidad en el objeto invocable que se utiliza para la cartografía:

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

No puede pasar una clase como argumento a 'p.map', obtendrá un error de pickle. La única forma en que he encontrado esto es implementar un tipo de 'pool.map' personalizado ... configurando y alimentando los procesos yo mismo. Desafortunadamente va a tomar más líneas. – catwalker333

2

Esto parece funcionar:

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) 
Cuestiones relacionadas