5

現在のところ、プロジェクトで実行しているBeanstalkワーカースレッドは1つだけで、cronベースのジョブとリアルタイムジョブの両方を処理します。それで、私はそれを2人の労働者に分けたいと思います。1つのワーカーはcronベースのジョブを追跡するために使用され、もう1つはリアルタイムの非同期ジョブを追跡するために使用されます。そのため、作業者の効率が向上します。誰でもこれについて私を助けることができます、

  1. PHPを使用して複数のbeanstalkワーカーを実行および非デーモン化する方法は?
  2. 複数のbeanstalkワーカーを処理するためのサンプルスクリプト?

注:現在、私はpheanstalkphplibを使用しています。

4

1 に答える 1

6

pheanstalk(または他のライブラリ)を使用して、多数のキューからジョブを受け入れたい場合は、それらを監視してください。

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

ワーカーの処理に関しては、現在、実行し続けたい非常によく似たスクリプトにSupervisordを使用しています。実行したいスクリプトが非常に単純な構成ファイルにリストされているPythonベースのデーモンです。(ワーカーを追加すると、文字通り1つの番号が変更され、構成が再ロードされます)。

私が行ったことの1つは、 running-the-workerのブログ投稿に基づいています。Supervisordはシェルスクリプトを実行します。そのスクリプトはPHPを実行し、PHPは値(with exit($x))を返します。キューランナーから値(たとえば99)を返すと、シェルスクリプトを終了してワーカーをシャットダウンします。別の値は、ワーカーを即座に再起動する場合があります。それ以外の場合は、再起動する前に数秒間スリープします。

于 2011-04-09T23:35:38.580 に答える