Estoy tratando de usar un pool de trabajadores en python usando objetos Process. Cada trabajador (un Proceso) realiza alguna inicialización (toma una cantidad de tiempo no trivial), obtiene una serie de trabajos (idealmente usando map()
) y devuelve algo. No se necesita comunicación más allá de eso. Sin embargo, parece que no puedo entender cómo usar map() para usar la función compute()
de mi trabajador.python Pool with worker Procesos
from multiprocessing import Pool, Process
class Worker(Process):
def __init__(self):
print 'Worker started'
# do some initialization here
super(Worker, self).__init__()
def compute(self, data):
print 'Computing things!'
return data * data
if __name__ == '__main__':
# This works fine
worker = Worker()
print worker.compute(3)
# workers get initialized fine
pool = Pool(processes = 4,
initializer = Worker)
data = range(10)
# How to use my worker pool?
result = pool.map(compute, data)
es un trabajo en cola el camino a seguir en su lugar, o puedo utilizar map()
?
Todos los objetos de proceso son con estado. Es posible que desee eliminar esa palabra del título. También. 'compute' es un método de un trabajador. En los ejemplos, generalmente es una función completamente independiente. ¿Por qué no escribir la función de cálculo para simplemente incluir tanto la inicialización como el procesamiento? –
Muy bien, gracias. La inicialización lleva mucho tiempo, por lo que solo quiero hacerlo una vez por proceso de trabajo. – Felix
Debe destacar la parte de la pregunta "se pasa una serie de trabajos". Dado que eso no era obvio. –