Ответ 1
Существуют два отличия: порядок и назначение.
Порядок выполнения - когда вы запускаете некоторые задачи с помощью do и runTasks, тогда они имеют более высокий приоритет, чем задачи. Таким образом, выполняемый порядок будет:
- все с высоким приоритетом (GearmanClient:: doHigh() или
GearmanClient:: doHighBackground()) - все задачи с высоким приоритетом (GearmanClient:: addTaskHigh() или GearmanClient:: addTaskHighBackground())
- все делают с нормальным приоритетом
- все задачи с нормальным приоритетом
- все делают с низким приоритетом
- все задачи с низким приоритетом
Цель:
Задача - используйте это для коротких задач, когда вам все равно, когда они заканчиваются или как прогресс
Do - используйте это для сложной работы или когда вам нужно проверить прогресс. Для этой цели 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 - это строка, поэтому вы можете ее где-то сохранить, а затем проверить ее в любое время.