2011-04-09 2 views
5

현재, 나는 프로젝트에 대해 하나의 beanstalk 작업자 스레드 만 실행하고 있습니다.이 스레드는 cron 기반 작업과 실시간 작업을 모두 처리합니다. 그래서 저는 그것을 두 명의 노동자로 분리하고 싶습니다. 한 작업자는 cron 기반 작업을 추적하는 데 사용되고 다른 하나는 실시간 비동기 작업을 추적하는 데 사용됩니다. 따라서 근로자의 효율성이 향상 될 것입니다. 누구나 PHP를 사용하여 여러 beanstalk 작업자를 실행하는 방법

  1. 어떻게 실행하고 PHP를 사용하여 여러 콩나무 노동자를 deamonize하는이 나를 도와 드릴까요?
  2. 여러 콩팥 작업자를 처리하기위한 샘플 스크립트는 무엇입니까?

참고 : 현재 pheanstalk php lib를 사용하고 있습니다.

+0

또한 여러 개의 튜브를 보는 방법? – karuh24

답변

6

pheanstalk (또는 다른 라이브러리)를 사용하면 여러 대기열에서 작업을 받아들이려고 할 수 있습니다. 취급 근로자로

$pheanstalk->watch('testtube') 
      ->watch('tube2') 
      ->watch('tube3'); 
$pheanstalk->reserve(); // get the next job from any of the tubes (+ 'default') 

, 나는 현재 내가 실행을 유지하려는 매우 유사한 스크립트 Supervisord을 사용하고 있습니다. 그 python 기반 데몬은 실행하려는 스크립트가 매우 간단한 구성 파일에 나열되어 있습니다. (더 많은 근로자를 추가하는 것은 말 그대로 단일 번호를 변경하고 구성을 다시로드하는 것입니다.)

내가 한 한 가지는 블로그 게시물 running-the-worker을 기반으로합니다. Supervisord는 쉘 스크립트를 실행합니다. 이 스크립트는 PHP를 실행하고 차례로 값을 반환합니다 (exit($x) 포함). 대기열 러너 (예 : 99)에서 값을 반환하면 쉘 스크립트를 종료하고 작업자를 종료합니다. 또 다른 값은 작업자를 즉시 ​​재시작 할 수 있습니다. 다른 작업은 다시 시작하기 전에 잠시 동안 잠자기 상태가됩니다.

+0

Alister에게 감사드립니다. – karuh24

+0

여러 개의 튜브를 보는 위의 예는 괜찮습니다. 그러나 위 스크립트에서는 단일 작업 스크립트에서 여러 개의 튜브를 관찰해야한다고 말합니다. 특정 튜브를 다시 시작하려면 어떻게해야합니까? 특정 튜브를 다시 시작하려면 어떻게해야합니까? 어떻게 각각의 튜브를 개별적으로 관리합니까? 각각의 튜브마다 작업자 스크립트를 작성해야합니까? 그렇다면 다중 작업자를위한 시작 스크립트는 어떻게됩니까? init.d에서 여러 작업자 스크립트를 어떻게 관리합니까? – karuh24

+0

재시동 튜브 란 무엇입니까? 동일한 스크립트가 여러 번 실행되고, 예를 들어 개별 튜브를보고, 여러 작업자를 시작하고, 명령 줄에서 볼 때 튜브 이름을 전달하기를 원할 것입니다. –

관련 문제