> 백엔드 개발 > PHP 튜토리얼 > PHP는 백그라운드 작업 관리 구현 코드를 얻습니다.

PHP는 백그라운드 작업 관리 구현 코드를 얻습니다.

高洛峰
풀어 주다: 2023-03-01 11:20:01
원래의
981명이 탐색했습니다.

复aze代码 代码如下: 
Controller_Jobs 클래스는 Controller_Base를 확장합니다{ 
public function before(){ 
parent::before(); 
if(요청::$protocol != "cli"){ 
die("cli만 허용됩니다!n"); 


공개 함수 after(){ 
parent::after(); 
//정리 작업 수행 

private function _execJobCommand($joburi,$paras){ 
$php_exec = Kohana::config("picsou.php_exec"); 
$php_index = APPINDEX; 
$command_args = 배열(); 
$command_args[] = $php_index; 
$command_args[] = "--uri=".$joburi; 
foreach($paras를 $para => $value로){ 
$command_args[] = "--".$para."=".$value; 

//var_dump($command_args);exit; 
echo "실행 명령:".$php_exec."n"; 
pcntl_exec($php_exec,$command_args); 

/* 
* 대기열에서 작업 실행 
*/ 
공개 함수 action_run(){ 
$requestCount = 0; 
while(true){ 
$sql = "상태='1'이고 승인='1'인 job_queue에서 *를 선택하여 ID별 주문"; 
$jobs = DB::query(Database::SELECT,$sql)->execute()->as_array(); 
if($jobs){ 
foreach($jobs를 $job으로){ 
$requestCount ++; 
//작업 상태를 실행 중으로 업데이트 
DB::update('job_queue')->set(array('status'=>'2')) 
->where(' id','=',$job['id'])->execute(); 
$job_pid = pcntl_fork(); 
if($job_pid == -1){ 
die("하위 항목을 포크할 수 없습니다."); 
} else if($job_pid == 0 ){ 
$this->_execJobCommand($job['job_uri'],json_decode($job['paras'],true)); 
echo "마침 어린이"; 
출구(0); 
//여기서 작업 실행 
} else{ 
echo "작업 대기 중"; 
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(); 
echo "하위 완료n"; 
ob_flush(); 
}else{ 
DB::update('job_queue')->set(array('status'=>'-1')) 
->where('id',' =',$job['id'])->execute(); 
echo "하위 실패n"; 
ob_flush(); 




else{ 
if($requestCount >=10){ 
echo "푹 쉬세요. 작업 10개를 처리했습니다n"; 
퇴장; 

//실행할 작업이 없습니다.
//echo "No jobn"; 
ob_flush(); 
수면(5); 



관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿