gearman 에서 작업 의 우선 순위 와 반환 상태 인 스 턴 스 분석

본 고의 실례 는 gearman 에서 임무 의 우선 순위 와 반환 상 태 를 설명 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
gearman 에서 작업 의 우선 순위 와 복귀 상태
1.퀘 스 트 의 우선 순위
동기 화 블록 호출,결 과 를 기다 리 고 있 습 니 다.

doLow:    
doNomal:     
doHigh:     
비동기 전송 작업 은 결 과 를 기다 리 지 않 고 작업 핸들 을 되 돌려 줍 니 다.이 핸들 을 통 해 작업 실행 상태 정 보 를 얻 을 수 있 습 니 다.

doLowBackground
doBackground
doHighBackground
Task 와 doXXX 의 차 이 를 주의 하 십시오.Task 는 하나의 job 입 니 다.발송 후 여러 worker 에 배정 되 어 병행 하여 실행 하고 결 과 를 호출 자 에 게 되 돌려 줍 니 다.
doXXX 의 모든 임 무 는 하나의 worker 에서 만 실 행 됩 니 다.

addTaskLow
addTask
addTaskHigh

addTaskLowBackground 
addTaskBackground 
addTaskHighBackground
cli.php 코드 는 다음 과 같 습 니 다.

<?php
$client = new GearmanClient();
$client->addServer('127.0.0.1', 4730);
$client->setCompleteCallback(function($task) {
  echo $task->data(), PHP_EOL;
});
//          Task
$client->addTaskLow('sum', json_encode(array(100, 100)));
$client->addTask('sum', json_encode(array(200, 200)));
$client->addTaskHigh('sum', json_encode(array(300, 300)));

$client->runTasks();
worker.php 코드 는 다음 과 같 습 니 다.

<?php
$worker = new GearmanWorker();
$worker->addServer('127.0.0.1', 4730);
$worker->addFunction('sum', function($job) {
  $data = json_decode($job->workload(), true);
  $ret = $data[0] + $data[1];
  echo $ret, PHP_EOL;
  sleep(1);
  return $ret;
});
while($worker->work());
실험 효 과 를 위해 서 워 커 는 하나만 시작 하면 됩 니 다.

2.퀘 스 트 획득 상태
cli.php 코드 는 다음 과 같 습 니 다.

<?php
$client = new GearmanClient();
$client->addServer('127.0.0.1', 4730);
//        
$client->setCreatedCallback('reverse_create');
//          
$client->setDataCallback('reverse_data');
//         
$client->setStatusCallback('reverse_status');
//        
$client->setCompleteCallback('reverse_complete');
//        
$client->setFailCallback('reverse_fail');
//          Task
$client->addTaskLow('reverse', '1234567');
$client->addTask('reverse', 'hello');
$client->addTaskHigh('reverse', 'world');

$client->runTasks();

function reverse_create($task) {
  echo '    (', $task->jobHandle() , '): ', PHP_EOL;
}
function reverse_data($task) {
  echo '    (', $task->jobHandle() , '): ', $task->data(), PHP_EOL;
}
function reverse_status($task) {
  //taskNumerator()           
  //taskDenominator()           
  echo '    (', $task->jobHandle() , '): ', $task->taskNumerator(), '/', $task->taskDenominator(), PHP_EOL;
}
function reverse_complete($task) {
  echo '    (', $task->jobHandle() , '): ', $task->data(), PHP_EOL;
}
function reverse_fail($task) {
  echo '    (', $task->jobHandle() , '): ', PHP_EOL;
}
worker.php 코드 는 다음 과 같 습 니 다.

<?php
$worker = new GearmanWorker();
$worker->addServer('127.0.0.1', 4730);
$worker->addFunction('reverse', function($job) {
  //workload()       
  $data = $job->workload();
  //workloadSize()           
  $dataSize = $job->workloadSize();
  echo "worker: {$data} ({$dataSize}) 
"; $tmp = 0; $mid = $dataSize / 2; for($ix = 0; $ix < $mid; ++$ix) { $tmp = $data[$ix]; $data[$ix] = $data[$dataSize - $ix - 1]; $data[$dataSize - $ix - 1] = $tmp; // , client reverse_status() // $job->sendStatus($ix + 1, $mid + 1); // , reverse_data() $job->sendData($data); sleep(1); } return $data; }); while($worker->work());
실행 결 과 는 다음 과 같 습 니 다.


더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기