ホームページ  >  記事  >  バックエンド開発  >  PHP はどのようにジョブ キューを取得し、実行プロセスを作成し、end_PHP チュートリアルを待つのか

PHP はどのようにジョブ キューを取得し、実行プロセスを作成し、end_PHP チュートリアルを待つのか

WBOY
WBOYオリジナル
2016-07-13 10:22:19818ブラウズ

PHP はどのようにジョブ キューを取得し、実行プロセスを作成し、終了を待つのでしょうか?

そのプロセスは、データベースからジョブ キューを取得し、実行用の新しいプロセスを作成します。ジョブが終了するまで待ちます。

コードスニペット:

クラスController_JobsはController_Baseを拡張します{

public function before(){

親::before();

if(Request::$protocol != "cli"){

die("cliのみ許可!n");

}

}

public function after(){

親::after();

//いくつかの掃除作業をします

}

プライベート関数_execJobCommand($joburi,$paras){

$php_exec = Kohana::config("picsou.php_exec");

$php_index = APPINDEX;

$command_args = array();

$command_args[] = $php_index;

$command_args[] = "--uri=".$joburi;

foreach ($paras as $para => $value){

$command_args[] = "--".$para."=".$value;

}

//var_dump($command_args);exit;

echo "execコマンド:".$php_exec."n";

pcntl_exec($php_exec,$command_args);

}

/*

* ジョブをキューで実行する

*/

パブリック関数 action_run(){

$requestCount = 0;

ながら(本当){

$sql = "select * from job_queue where status='1' and allowed='1' order by id";

$jobs = DB::query(Database::SELECT,$sql)->execute()->as_array();

if($jobs){

foreach ($jobs as $job){

$requestCount++;

//ジョブのステータスを実行中として更新します

DB::update('job_queue')->set(array('status'=>'2'))

->where('id','=',$job['id'])->execute();

$job_pid = pcntl_fork();

if($job_pid == -1){

die("Could not fork Child");

} else if($job_pid == 0 ){

$this->_execJobCommand($job['job_uri'],json_decode($job['paras'],true));

エコー「チャイルドンを終えて」;

exit(0);

//ここでジョブを実行します

} 他{

エコー「ジョブンを待っています」;

ob_flush();

$child_pid = pcntl_waitpid($job_pid,$status, WUNTRACED);

echo "waitpid end:".$status."n";

if($status == 0){

//仕事が完了しました

DB::update('job_queue')->set(array('status'=>'999'))

->where('id','=',$job['id'])->execute();

「子供は終了しました」をエコーし​​ます;

ob_flush();

}その他{

DB::update('job_queue')->set(array('status'=>'-1'))

->where('id','=',$job['id'])->execute();

「子供が失敗しました」をエコー;

ob_flush();

}

}

}

}

その他{

if($requestCount >=10){

echo "休憩してください。10 個のジョブを処理しましたn";

退出;

}

//実行するジョブがありません

//echo "仕事がありません";

ob_flush();

睡眠(5);

}

}

}

}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/848339.html技術記事 PHP はどのようにジョブ キューを取得し、実行プロセスを作成し、バックグラウンド ジョブ管理インスタンスの終了を待機しますか? そのプロセスは次のとおりです: データベースからジョブ キューを取得し、実行用の新しいプロセスを作成して待機します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。