基于: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