-1

バックグラウンドでphpワーカースクリプトを持つギアマンサーバーがあります(supervisordによって管理されます)。プロセスは非同期であるため、メイン スクリプトは待機する必要がありません。

問題は、バックグラウンドで 100% ワーカーを必要としないことです。ワーカーの仕事がある場合にのみ必要です。バックグラウンドのphpプロセスを回避する方法はありますか? たとえば、着信タスクを監視し、適切な php ファイルを実行するスクリプトはありますか?

私が考えている解決策は、次のようなphpコードを実行するシェルsciptを作成することです。

gearman -w -f 'my_func' ./my_func_exec.sh 

my_func_exec.sh の場所:

php -q my_func.php

しかし、ワークロードを my_func.php に渡すにはどうすればよいでしょうか? それとも、既製のソリューションはありますか?

4

1 に答える 1

1

まず、バックグラウンド ワーカーについて心配する必要はないと思います。アイドリングのオーバーヘッドはほぼゼロですが、開始と停止のオーバーヘッドはそうではありません。

また、複数の同時クライアント要求を開始しないようにするために、多くのロックの問題が発生します。

とはいえ、ユースケースのパターンは次のとおりです。

  • フラグファイルを定義し、起動時にタッチします (これは重要です: ファイルが存在するということはワーカーが実行されていないことを意味します)
  • unlink()戻り値を保持してワーカーを消費したいクライアント
  • この戻り値が true の場合、このスレッドはファイルのリンクを解除するスレッドであり、ワーカーの作成時にロックを取得しているようです: したがって、彼はワーカーを作成しますshell_exec()- バックグラウンドで起動するように注意してください (つまり/path/to/php php -q /path/to/my_func.php &)
  • クライアントはワーカーが利用可能になるのを待ってジョブを送信します
  • ワーカーは通常のループを使用せずwhile($worker->work());、単一の呼び出しを使用してから、フラグファイルを書き込んで終了します。
于 2013-06-28T12:02:05.847 に答える