Estoy tratando de utilizar el módulo de multiprocesamiento en Python 2.6, pero parece que hay algo que no entiendo. Esperaría que la clase a continuación agregue los números que le envía add() y devuelve la suma en el método get_result(). El siguiente código imprime "0", me gustaría imprimir "2". ¿Qué me he perdido?Con el módulo de multiprocesamiento
import multiprocessing
class AdderProcess(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
self.sum = 0
self.queue = multiprocessing.JoinableQueue(5)
self.daemon = True
self.start()
def run(self):
while True:
number = self.queue.get()
self.sum += number
self.queue.task_done()
def add(self, number):
self.queue.put(number)
def get_result(self):
self.queue.join()
return self.sum
p = AdderProcess()
p.add(1)
p.add(1)
print p.get_result()
PS. Este problema ha sido resuelto. ¡Gracias por las respuestas! Sólo para hacer más fácil para los lectores, aquí está la versión de trabajo completa:
import multiprocessing
class AdderProcess(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
self.sum = multiprocessing.Value('d', 0.0)
self.queue = multiprocessing.JoinableQueue(5)
self.daemon = True
self.start()
def run(self):
while True:
number = self.queue.get()
self.sum.value += number
self.queue.task_done()
def add(self, number):
self.queue.put(number)
def get_result(self):
self.queue.join()
return self.sum.value
p = AdderProcess()
p.add(1)
p.add(1)
print p.get_result()
Suponiendo que quiere decir que debería sustituir a mi inicializador con su código, el código provoca una excepción TypeError cuando se ejecuta. ¿Funcionó para ti? ¿Puedes dar más detalles sobre lo que estás haciendo aquí? –
Lo siento, me he corrido el código, simplemente se olvidó de incluir todos mis cambios. También debe cambiar 'self.sum' por' self.sum.value' para acceder o cambiar el valor. – unutbu
Ok, creo que lo tengo ahora. No hay magia RPC que hace que el método de las llamadas se dirigen a otro proceso, la única información compartida es el compartido de forma explícita con los tipos de datos previstos a tal efecto. Tiene sentido, supongo. ¡Gracias! –