gpt4 book ai didi

python - 使用 python.multiprocessing,如何在当前进程中创建代理以传递给其他进程?

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:46 24 4
gpt4 key购买 nike

我在 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 方法,但它似乎不受支持。有任何想法吗?有人知道吗?

最佳答案

为什么说 serve_forever 不受支持?

manager = Mymanager()
s = manager.get_server()
s.serve_forever()

应该可以。

参见 managers.BaseManager.get_server 官方示例文档。

关于python - 使用 python.multiprocessing,如何在当前进程中创建代理以传递给其他进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1458205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com