CakeFest 2024: The Official CakePHP Conference

GearmanClient::doBackground

(PECL gearman >= 0.5.0)

GearmanClient::doBackgroundЗапускает выполнение задачи в фоновом режиме

Описание

public GearmanClient::doBackground(string $function, string $workload, ?string $unique = null): string

Запускает выполнение задачи в фоновом режиме, возвращая дескриптор задания, который может быть использован для запроса состояния выполняющейся задачи.

Список параметров

function

Зарегистрированная функция, вызываемая рабочим процессом

workload

Сериализованные данные, подлежащие обработке

unique

Уникальный ID, назначаемый определённой задаче

Возвращаемые значения

Дескриптор задания для отправленной задачи.

Примеры

Пример #1 Отправляет и отслеживает фоновое задание

Обработчик в этом примере имеет искусственную задержку, чтобы смоделировать длительное выполнение задания. Клиент периодически проверяет состояние выполняющегося задания.

<?php

/* создание объекта */
$gmclient= new GearmanClient();

/* указание сервера по умолчанию */
$gmclient->addServer();

/* запуск выполнение клиента */
$job_handle = $gmclient->doBackground("reverse", "this is a test");

if (
$gmclient->returnCode() != GEARMAN_SUCCESS)
{
echo
"неуспешный код возврата\n";
exit;
}

$done = false;
do
{
sleep(3);
$stat = $gmclient->jobStatus($job_handle);
if (!
$stat[0]) // задание известно, но не выполнено
$done = true;
echo
"Выполняется: " . ($stat[1] ? "true" : "false") . ", числитель: " . $stat[2] . ", знаменатель: " . $stat[3] . "\n";
}
while(!
$done);

echo
"завершено!\n";

?>

Вывод приведённого примера будет похож на:

Выполняется: true, числитель: 3, знаменатель: 14
Выполняется: true, числитель: 6, знаменатель: 14
Выполняется: true, числитель: 9, знаменатель: 14
Выполняется: true, числитель: 12, знаменатель: 14
Выполняется: false, числитель: 0, знаменатель: 0
завершено!

Смотрите также

  • GearmanClient::doNormal() - Выполняет одиночное задание и возвращает результат
  • GearmanClient::doHigh() - Запускает на выполнение задачу с высоким приоритетом
  • GearmanClient::doLow() - Запускает на выполнение задачу с низким приоритетом
  • GearmanClient::doHighBackground() - Запускает на выполнение с высоким приоритетом задачу в фоновом режиме
  • GearmanClient::doLowBackground() - Запускает на выполнение с низким приоритетом задачу в фоновом режиме

add a note

User Contributed Notes 1 note

up
7
felix at passcod dot name
6 years ago
Behaviour of the unique ID argument:

If it's not provided, it defaults to a UUIDv1 (timestamp + mac address).

Otherwise, if a job with the same unique ID exists (i.e. is either queued or currently executing), then that job is used, not the one you're submitting. This does not apply to past (completed) jobs, and works across the entire job server pool, assuming no partitioning.

Or with code (the values in [brackets] are the server-assigned job identifiers):

<?php

$gearman
->doBackground('sleep', '3', '123'); // [H:host:1] Starts sleep(3)
$gearman->doBackground('sleep', '5', '456'); // [H:host:2] Queues sleep(5)
$gearman->doBackground('sleep', '3', '123'); // [H:host:1] Does nothing
$gearman->doBackground('sleep', '1', '123'); // [H:host:1] Also does nothing (diff args don't trigger new jobs)

sleep (3);
// Job 123 [sleep(3)] has finished by now

$gearman->doBackground('sleep', '3', '123'); // [H:host:3] Starts a new job

?>
To Top