我想在Python 2.6中使用多處理模塊,但顯然有一些我不明白。我希望下面的類加起來()由加載發送給它的編號,並在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()
假設你的意思是我應該與你的代碼替換我的初始化,執行時的代碼會導致一個TypeError異常。它對你有用嗎?你能詳細說明你在這裏做什麼嗎? –
對不起,我運行代碼,我只是忘了,包括我的所有更改。您還需要修改'self.sum'爲'self.sum.value'訪問或更改值。 – unutbu
好吧,我想我現在弄明白了。沒有使方法調用進入其他進程的RPC魔術,唯一的共享信息是與爲此目的而提供的數據類型明確共享的信息。我猜是有道理的。謝謝! –