2013-07-08 3 views
0

multiprocessing 모듈의 원격 관리자 기능을 사용하여 여러 컴퓨터간에 작업을 배포하려고합니다. 타사 모듈이 있다는 것을 알고 있지만 가능한 한 코어를 고수하고 싶습니다. 데스크톱 용 (단일 컴퓨터), multiprocessing.Pool 클래스를 사용하여 CPU 수를 제한 할 수 있지만 원격 관리자와 몇 가지 질문이 있습니다. Python, 원격 관리자 및 다중 처리 사용

I가 원격 관리자에 대한 다음 코드를

from multiprocessing.managers import BaseManager 
    import Queue 
    queue = Queue.Queue() 
    class QueueManager(BaseManager): pass 
    QueueManager.register('get_queue', callable=lambda:queue) 
    m = QueueManager(address=('', 50000), authkey='abracadabra') 
    s = m.get_server() 
    s.serve_forever() 

이 잘 작동하고, 심지어 다음 코드를 사용하여 대기열에 작업을 제출할 수 있습니다 :

QueueManager.register('get_queue') 
m = QueueManager(address=('machinename', 50000), authkey='abracadabra') 
m.connect() 
queue = m.get_queue() 
queue.put('hello')QueueManager.register('get_queue') 
m = QueueManager(address=('localhost', 50000), authkey='abracadabra') 
m.connect() 
queue = m.get_queue() 
queue.put('hello') 

또한 수를 queue.get()은 큐에 단일 항목을 가져옵니다.

  1. 대기열에있는 항목을 어떻게 가져 옵니까? 대기열을 반복 할 때 무한 루프가됩니다.
  2. 근로자에게 각 기계를 기계 당 1 개의 작업으로 제한 할 수 있습니까?
  3. 이 방법은 작업자가 있는지 여부를 검사해야하는 끌어 오기 방법 인 것처럼 보이므로 다중 처리 서버를 트리거 할 수있는 푸시 방법이있을 수 있습니까?

    while True: 
        elem = queue.get() #queue empty -> it blocks!!! 
    

    가 있습니다 실행 더 이상 작업이 없을 때 "반복 처리"와 큐 이상하는 것은 당신의 작업자 프로세스를 차단하는 우아한 방법 : 큐를 통해

답변