Я использую библиотеку multiprocessing
в Python. Я вижу, как определить, что для объектов , возвращаемых из функций, должны быть созданы прокси, но я бы хотел, чтобы объекты в текущем процессе превратились в прокси, чтобы я мог передавать их в качестве параметров.
Например, запустив следующий скрипт:
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
, но он не поддерживается. Есть идеи?
Кто-нибудь знает?