Подтвердить что ты не робот

В чем разница между заданием и

Когда вы просматриваете документы php gearman, я вижу, что есть задача и делаю, у обоих из них есть фоновые и нефонические, и у них также все высокие, низкие и нормальные.

Кто-нибудь может это прояснить? Я просто смущен этой разницей.

4b9b3361

Ответ 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 - это строка, поэтому вы можете ее где-то сохранить, а затем проверить ее в любое время.

Ответ 2

Хорошо, я сделал несколько исследований для вас, как я думал об этом тоже.

Если вы запустите команду, она сразу же запускается (отправляется на сервер заданий) http://www.php.net/manual/en/gearmanclient.donormal.php

Do

Запускает одну задачу и возвращает строковое представление результата. Согласитесь с форматом результата, до GearmanClient и GearmanWorker.

Задача: вы можете создать список из них, а затем запустить их Параллельно, когда вы GearmanClient:: Run().

http://www.php.net/manual/en/gearmanclient.addtask.php

Task

Добавляет задачу, которая должна выполняться параллельно с другими задачами. Вызовите этот метод для всех задач, которые будут выполняться параллельно, затем вызовите GearmanClient:: runTasks() для выполнения этой работы. Обратите внимание: достаточное количество работников должно быть доступно для всех задач, выполняемых параллельно.