2009-09-22 47 views
2

저는 파이썬에서 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

serve_forever가 지원되지 않는 말을합니까?

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

.

공식 예제 managers.BaseManager.get_server 문서를 참조하십시오.

+0

워드 프로세서 사실 get_server에 의해 반환 된 서버 객체가 serve_forever 기능의 소유자 인 경우 serve_forever에서, BaseManager 객체에 속한다는 것을 말한다! – manifest

+0

관리자는 물론 BaseManager에서 상속받습니다. – drAlberT