저는 파이썬에서 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
메서드를 언급했지만 지원되지 않는 것 같습니다. 어떤 아이디어? 아는 사람 있습니까?
워드 프로세서 사실 get_server에 의해 반환 된 서버 객체가 serve_forever 기능의 소유자 인 경우 serve_forever에서, BaseManager 객체에 속한다는 것을 말한다! – manifest
관리자는 물론 BaseManager에서 상속받습니다. – drAlberT