如何在当前进程中使用python.multiprocessing创建代理以传递给其他进程?
我正在使用Python的multiprocessing
库。我知道如何定义从函数返回的对象应该创建代理,但我想把当前进程中的对象变成代理,这样我就可以把它们作为参数传递。
比如,运行下面这个脚本:
from multiprocessing import current_process
from multiprocessing.managers import BaseManager
class ProxyTest(object):
def call_a(self):
print 'A called in %s' % current_process()
def call_b(self, proxy_test):
print 'B called in %s' % current_process()
proxy_test.call_a()
class MyManager(BaseManager):
pass
MyManager.register('proxy_test', ProxyTest)
if __name__ == '__main__':
manager = MyManager()
manager.start()
pt1 = ProxyTest()
pt2 = manager.proxy_test()
pt1.call_a()
pt2.call_a()
pt1.call_b(pt2)
pt2.call_b(pt1)
... 我得到了以下输出 ...
A called in <_MainProcess(MainProcess, started)>
A called in <Process(MyManager-1, started)>
B called in <_MainProcess(MainProcess, started)>
A called in <Process(MyManager-1, started)>
B called in <Process(MyManager-1, started)>
A called in <Process(MyManager-1, started)>
... 但我希望最后一行输出来自_MainProcess
。
我可以创建另一个进程并从那里运行,但我想尽量减少进程之间需要传递的数据量。Manager
对象的文档提到了一个serve_forever
方法,但似乎不支持。有没有什么想法?有人知道吗?
1 个回答
1
你为什么说 serve_forever 不被支持呢?
manager = Mymanager()
s = manager.get_server()
s.serve_forever()
应该是可以工作的。
可以查看 managers.BaseManager.get_server 的文档,里面有官方的例子。