GearmanClient::doBackground
(PECL gearman >= 0.5.0)
GearmanClient::doBackground — Run a task in the background
Description
$function_name
, string $workload
[, string $unique
] )Runs a task in the background, returning a job handle which can be used to get the status of the running task.
Parameters
-
function_name
-
A registered function the worker is to execute
-
workload
-
Serialized data to be processed
-
unique
-
A unique ID used to identify a particular task
Return Values
The job handle for the submitted task.
Examples
Example #1 Submit and monitor a background job
The worker in this example has an artificial delay introduced to mimic a long running job. The client script periodically checks the status of the running job.
<?php
/* create our object */
$gmclient= new GearmanClient();
/* add the default server */
$gmclient->addServer();
/* run reverse client */
$job_handle = $gmclient->doBackground("reverse", "this is a test");
if ($gmclient->returnCode() != GEARMAN_SUCCESS)
{
echo "bad return code\n";
exit;
}
$done = false;
do
{
sleep(3);
$stat = $gmclient->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";
?>
The above example will output something similar to:
Running: true, numerator: 3, denomintor: 14 Running: true, numerator: 6, denomintor: 14 Running: true, numerator: 9, denomintor: 14 Running: true, numerator: 12, denomintor: 14 Running: false, numerator: 0, denomintor: 0 done!
See Also
- GearmanClient::doNormal() - Run a single task and return a result
- GearmanClient::doHigh() - Run a single high priority task
- GearmanClient::doLow() - Run a single low priority task
- GearmanClient::doHighBackground() - Run a high priority task in the background
- GearmanClient::doLowBackground() - Run a low priority task in the background
- Функция GearmanClient::addOptions() - Добавить клиентские опции
- Функция GearmanClient::addServer() - Добавить сервер задач для клиента
- Функция GearmanClient::addServers() - Добавить список серверов задач для клиента
- Функция GearmanClient::addTask() - Добавить задачу, которая будет выполнена в параллельном режиме
- Функция GearmanClient::addTaskBackground() - Добавить фоновую задачу для работы в параллельном режиме
- Функция GearmanClient::addTaskHigh() - Добавить высокоприоритетную задачу для работы в параллельном режиме
- Функция GearmanClient::addTaskHighBackground() - Добавить высокоприоритетную фоновую задачу для работы в параллельном режиме
- Функция GearmanClient::addTaskLow() - Добавить низкоприоритетную задачу для работы в параллельном режиме
- Функция GearmanClient::addTaskLowBackground() - Добавить низкоприоритетную фоновую задачу для работы в параллельном режиме
- Функция GearmanClient::addTaskStatus() - Добавить задачу для получения статуса
- Функция GearmanClient::clearCallbacks() - Очистить все функции обратного вызова данной задачи
- Функция GearmanClient::clone() - Создать копию объекта GearmanClient
- Функция GearmanClient::__construct() - Создать экземпляр GearmanClient
- Функция GearmanClient::context() - Возвращает контекст приложения
- Функция GearmanClient::data() - Возвращает данные приложения (функция устарела)
- Функция GearmanClient::do() - Выполняет одну задачу и возвращает результат [Устаревший метод]
- Функция GearmanClient::doBackground() - Запускает выполнение задачи в фоновом режиме
- Функция GearmanClient::doHigh() - Запускает на выполнение задачу с высоким приоритетом
- Функция GearmanClient::doHighBackground() - Запускает на выполнение с высоким приоритетом задачу в фоновом режиме
- Функция GearmanClient::doJobHandle() - Получить дескриптор выполняющейся задачи
- Функция GearmanClient::doLow() - Запускает на выполнение задачу с низким приоритетом
- Функция GearmanClient::doLowBackground() - Запускает на выполнение с низким приоритетом задачу в фоновом режиме
- Функция GearmanClient::doNormal() - Выполняет одиночное задание и возвращает результат
- Функция GearmanClient::doStatus() - Получение статуса обработки задания
- Функция GearmanClient::echo() - Отправляет данные всем серверам заданий, чтобы проверить отклик [Устаревший метод]
- Функция GearmanClient::error() - Вернуть строку ошибки для последней встретившейся ошибки
- Функция GearmanClient::getErrno() - Получить значение errno
- Функция GearmanClient::jobStatus() - Получение статуса выполнения фонового задания
- Функция GearmanClient::ping() - Отправляет данные на все сервера и смотрит, какие из них выведут эти данные
- Функция GearmanClient::removeOptions() - Удалить клиентские опции
- Функция GearmanClient::returnCode() - Получить последний возвращённый код Gearman
- Функция GearmanClient::runTasks() - Запустить список задач в параллельном режиме
- Функция GearmanClient::setClientCallback() - Установить функцию обратного вызова, когда есть пакет данных для задачи (устаревший метод)
- Функция GearmanClient::setCompleteCallback() - Установите функцию, которая будет вызвана по завершении задачи
- Функция GearmanClient::setContext() - Установить данные приложения
- Функция GearmanClient::setCreatedCallback() - Установить функцию обратного вызова, когда задача ставится в очередь
- Функция GearmanClient::setData() - Установить данные приложения (устаревший метод)
- Функция GearmanClient::setDataCallback() - Задает callback-функцию для обработки переданных данных
- GearmanClient::setExceptionCallback
- GearmanClient::setFailCallback
- Функция GearmanClient::setOptions() - Задание настроек клиента
- Функция GearmanClient::setStatusCallback() - Задание callback-функции, собирающей информацию о состоянии обработчика заданий
- Функция GearmanClient::setTimeout() - Установка таймаута для операций ввода/вывода
- Функция GearmanClient::setWarningCallback() - Задание callback-функции, обслуживающей предупреждения обработчика заданий
- GearmanClient::setWorkloadCallback
- Функция GearmanClient::timeout() - Получение значения таймаута операций ввода/вывода
Коментарии
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
?>