Использование модуля многопроцессорности

Я пытаюсь использовать модуль многопроцессорности в python 2.6, но, по-видимому, есть кое-что, чего я не понимаю. Я ожидал, что приведенный ниже класс суммирует числа, отправленные ему с помощью add (), и вернет сумму в методе get_result (). Код ниже печатает «0», я бы хотел напечатать «2». Что я упустил?

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. Эта проблема решена. Спасибо за ответы! Чтобы облегчить задачу читателям, вот полная рабочая версия:

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()
5
задан Mats Ekberg 18 October 2011 в 16:14
поделиться