Pregunta

Estoy de subclases de la clase Process, en una clase que llamo EdgeRenderer. Quiero usar multiprocessing.Pool, excepto que en lugar de los procesos regulares, yo quiero que sean las instancias de mi EdgeRenderer. ¿Posible? ¿Cómo?

¿Fue útil?

Solución

A partir de Jesse Noller:

  

No se admite actualmente en el   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

Otros consejos

No veo ningún gancho para que en el API. Usted puede ser capaz de salirse con la replicación de su funcionalidad deseada mediante el uso de initializer y el argumento initargs. Alternativamente, se puede construir la funcionalidad en el objeto invocable que se utiliza para el mapeo:

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)

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top