2015-01-08 1 views
0

필자는 두 가지 작업자를 듣기 모드 (일부 데이터를 사용하여 교육)에두고 다른 클라이언트에서 전화를 걸기를 원하는 전형적인 시나리오를 가지고 있습니다. 다른 데이터에, 너 한테 학습 기계를 사용하여 훈련 W2 동일한 포트에서 2 명의 다른 기어맨 클라이언트/작업자를 실행할 수 있습니까?

for(100 times) 
    w1 (listening) <- c1 will call 
    result1 
    w2 (listening) <- c2 will call 
    result2 
    compare (result1 and result2) 

W1

, 그래서 시간이 자신의 프로세스를 완료합니다. 따라서 그들은 듣기 모드로 유지해야하며 매번 시작할 수 없습니다.

나는 4730과 4731., 다른 포트에서 실행 시키면, 그것은 단지 하나 개의 포트에서 작동 추측 4730.

클라이언트 :

class client_(object): 
    def __init__(self): 
     self.gm_client = gearman.GearmanClient(['localhost:4730'])  

    def callWorker(self, query): 
     c_result = {} 
     completed_job_request = self.gm_client.submit_job("db_worker", query) 
     c_result = completed_job_request.result 
     c_result = json.loads(c_result) 

노동자 :

def __init__(self): 
    self.gm_worker = gearman.GearmanWorker(['localhost:4730']) 
    self.gm_worker.register_task('db_worker', self.testClassifier) 
    self.root_dir = os.getcwd() 
    self.trainClassifier() 

이 시나리오를 어떻게 관리합니까? 그것이 명확하지 않은 경우 알려주십시오.

답변

1

또한 gearmand 서버를 실행해야합니다! 클라이언트/작업자 라이브러리를 사용하여 클라이언트에서 작업자로 직접 메시지를 보낼 수 없습니다. 작업은 서버로 전송되고 메모리 내 대기열에 저장되며 사용 가능한 상태가되면 해당 작업자에게 전달됩니다.

4730은 gearmand 서버에서 사용되는 기본 포트입니다.

apt-get 또는 https://launchpad.net/gearmand에서 gearmand를 다운로드하고 시작해야합니다. 클라이언트와 작업자에게 전달하는 인수는 서버의 호스트 이름과 포트입니다. 서버는 작업과 해당 작업자를 일치시키기 위해 submit_job 및 register_task ("db_worker"의 경우)에 전달 된 문자열을 사용합니다.

이것은 두 작업자 모두에 대해 동일한 서버 및 포트를 사용할 수 있으며 두 개의 다른 기능 이름으로 등록하기 만하면됩니다.

당신은 http://gearman.org/에서 문서를 살펴 가질 수 있지만, 여기에서 서버 다운로드 및 실행 지침 찾을 수 있습니다 ... 아주 나쁜 : http://gearman.org/getting-started