【发布时间】:2013-03-04 14:11:16
【问题描述】:
基于:http://docs.python.org/2/library/multiprocessing.html#managers 我正在重写一个示例,将其拆分为 2 个进程,一个客户端和一个服务器。就是如下代码:
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 相同的级别,而不是在另一个类中,我如何在 A 中调用这些函数乙?
【问题讨论】:
-
你需要查看消息传递...
标签: python python-2.7 multiprocessing shared-memory python-multiprocessing