有两个区别:运行顺序和目的.
运行顺序 – 当您通过操作和runTasks运行某些任务时,优先级高于任务.所以运行顺序将由:
>所有这些都用高优先级(GearmanClient :: doHigh()或
GearmanClient :: doHighBackground())
>所有任务高优先级(GearmanClient :: addTaskHigh()或
GearmanClient :: addTaskHighBackground())
>所有做的都是正常的优先级
>所有任务具有正常优先级
>所有做的都是低优先级
>具有低优先级的所有任务
目的:
任务 – 将其用于简短的任务,当您不在乎完成或进度如何
做 – 用于复杂的工作或需要检查进度时.为此目的有GearmanJob::sendStatus():
worker.php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction("sleep13", array('MyWorker', 'sleep13'));
while ($worker->work());
class MyWorker {
public function sleep13($job) {
$data = unserialize($job->workload());
echo 'start ' . $data['id'] . PHP_EOL;
for($i = 0; $i < 13; $i++) {
sleep(1);
$job->sendStatus($i, 13);
}
echo 'done ' . $data['id'] . PHP_EOL;
}
}
client.php
$client = new GearmanClient();
$client->addServer();
// Run task
$job_handle = $client->doBackground("sleep13", serialize(array('id' => 'normal-1')));
// Check progress
$done = false;
do {
usleep(300);
$stat = $client->jobStatus($job_handle);
if (!$stat[0]) // the job is known so it is not done
$done = true;
echo "Running: " . ($stat[1] ? "true" : "false") . ", numerator: " . $stat[2] . ", denomintor: " . $stat[3] . "\n";
} while(!$done);
echo "done!\n";
$job_handle是字符串,所以你可以将它存储在某个地方,然后随时检查.