Python:给定两个进程A和B,从B调用A中的函数
基于:我正在重写一个示例,将其分为两个进程,一个客户端和一个服务器。代码如下:Python:给定两个进程A和B,从B调用A中的函数,python,python-2.7,multiprocessing,shared-memory,python-multiprocessing,Python,Python 2.7,Multiprocessing,Shared Memory,Python Multiprocessing,基于:我正在重写一个示例,将其分为两个进程,一个客户端和一个服务器。代码如下: from multiprocessing.managers import BaseManager import multiprocessing class ManagerServer(multiprocessing.Process): def __init__(self): multiprocessing.Process.__init__(self) class MathsClass(object
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调用A中的这些函数?首先,您应该将
MathsClass
中的self
变量重命名为其他变量以避免冲突。在您的示例中,要访问ManagerServer
中的函数,您必须静态调用它,并将ManagerServer
的实例作为第一个参数传递给它。好在我们已经定义了一个self
。这应该可以做到:
from multiprocessing.managers import BaseManager
import multiprocessing
class ManagerServer(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
class MathsClass(object):
def add(innerSelf, x, y):
return ManagerServer.addOuter(self, x, y)
def mul(innerSelf, x, y):
return x * y
class MyManager(BaseManager):
pass
def addOuter(self, x, y):
return x + y
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()
您需要查看消息传递。。。