0

네트워크 다중 처리 설정을 http://eli.thegreenplace.net/2012/01/24/distributed-computing-in-python-with-multiprocessing/ (즉, 네트워크에 연결된 많은 클라이언트와 2 개의 대기열을 공유하는 하나의 서버)으로 간주하십시오.multiprocessing.managers.SyncManager를 사용하여 상수 값 공유

서버가 모든 클라이언트와 일부 매개 변수를 공유 할 수 있도록이 예제를 확장하고자합니다. 링크 된 코드에 따라, 내가 추가로 호출합니다 (get_params 비트) 등록하여 JobQueueManager합니다 (서버 쪽) 확장 :

JobQueueManager.register('get_job_q', callable=lambda: job_q) 
JobQueueManager.register('get_result_q', callable=lambda: result_q) 
JobQueueManager.register('get_params', callable=lambda: ['123']) 

manager = JobQueueManager(address=('', port), authkey=authkey) 
manager.start() 

이 일을 만들려면 다음과 같이, 나는 클라이언트 코드를 변경했다

job_q  = manager.get_job_q() 
result_q = manager.get_result_q() 
params  = manager.get_params()._getvalue() 

그러나 대기열에는 필요하지 않은데 왜 _getvalue()이 필요합니까? 더 나은/적절한 방법이 있습니까? 당신은 __dunder__ 방법 __getitem__, __setitem__ 같은 일반 목록에 원활하게 접근 할 수 있도록하는 ListProxy을 지정할 필요가

답변

0

, 당신은 ListProxy을 지정하지 않으면

from multiprocessing.managers import ListProxy 

JobQueueManager.register('get_params', callable=lambda: ['123'], proxytype=ListProxy) 

, 당신이 등을 종료 목록 개체 (append, extend 등)의 공용 메서드에 대한 액세스 만 가져옵니다.

+0

고마워요! 그건 대접이야. – Paul