に基づく:http ://docs.python.org/2/library/multiprocessing.html#managers私は、クライアントとサーバーの2つのプロセスに分割されるように例の1つを書き直しています。次のコードです。
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の2つのプロセスがあり、Aが別のクラス内ではなくinitと同じレベルで定義された関数を持っている場合、BからAでこれらの関数を呼び出すにはどうすればよいですか?