PHP Conference Nagoya 2025

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() - Запускает на выполнение с низким приоритетом задачу в фоновом режиме

Добавить

Примечания пользователей 1 note

up
8
felix at passcod dot name
7 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