基於:http://docs.python.org/2/library/multiprocessing.html#managers我正在重寫一個要在兩個進程中分裂的示例,即客戶機和服務器。這是下面的代碼:Python:給定2個進程A和B,從B調用A中的函數
from multiprocessing.managers import BaseManager
import multiprocessing
class ManagerServer(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
class MathsClass(object):
def add(self, x, y):
return x + y
def mul(self, x, y):
return x * y
class MyManager(BaseManager):
pass
MyManager.register('Maths', MathsClass)
m = MyManager(address=('', 50000), authkey='abracadabra')
self.s = m.get_server()
def run(self):
self.s.serve_forever()
class ManagerClient(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
class MyManager(BaseManager):
pass
MyManager.register('Maths')
self.m = MyManager(address=('', 50000), authkey='abracadabra')
def run(self):
self.m.connect()
maths = self.m.Maths()
print maths.add(4, 3)
print maths.mul(7, 8)
if __name__ == "__main__":
ms = ManagerServer()
mc = ManagerClient()
ms.start()
mc.start()
此代碼的工作,並從客戶端,我可以打電話到從服務器類MathsClass內的功能。
我遇到的問題是我僅限於在MathsClass中直接定義的函數,它們沒有處理其他任何地方的數據。例如,如果在ManagerServer中定義了一個名爲「addOuter(self,x,y)」的函數,然後在MathsClass類中,在它的函數add中,我調用addOuter(),它看不到它,並且它表示它不存在。因此,我的問題是,給定兩個進程A和B,其中A具有與init相同級別定義的函數,而不是在另一個類中,我怎樣才能從B中調用這些函數?
您需要查看消息傳遞... – 2013-03-15 18:31:26