array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'gearmanclient.addtaskstatus.php', 1 => 'GearmanClient::addTaskStatus', ), 'up' => array ( 0 => 'class.gearmanclient.php', 1 => 'GearmanClient', ), 'prev' => array ( 0 => 'gearmanclient.addtasklowbackground.php', 1 => 'GearmanClient::addTaskLowBackground', ), 'next' => array ( 0 => 'gearmanclient.clearcallbacks.php', 1 => 'GearmanClient::clearCallbacks', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/gearman/gearmanclient/addtaskstatus.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PECL gearman >= 0.5.0)
GearmanClient::addTaskStatus — Добавить задачу для получения статуса
Используется для запроса информации о состоянии с сервера Gearman, который будет вызывать указанный callback-функцию статуса (заданную через GearmanClient::setStatusCallback()).
job_handle
Дескриптор задания для получения статуса задачи
context
Данные, которые будут переданы обратному вызову. Обычно ссылка на массив или объект
Объект GearmanTask или false
в случае возникновения ошибки.
Пример #1 Мониторинг завершения нескольких фоновых задач
В этом примере представлена искусственная задержка в обработчике, чтобы смоделировать долгий рабочий процесс. Есть только один обработчик, запущенный для этого примера.
<?php
/* создание клиентского объекта */
$gmclient= new GearmanClient();
/* добавление сервера задач по умолчанию */
$gmclient->addServer();
/* запуск некоторых фоновых задач и сохранение дескрипторов */
$handles = array();
$handles[0] = $gmclient->doBackground("reverse", "Hello World!");
$handles[1] = $gmclient->doBackground("reverse", "!dlroW olleH");
$gmclient->setStatusCallback("reverse_status");
/* Опрос сервера с целью определения, когда завершатся фоновые задачи; */
/* лучшим методом может быть установка callback-функций на события */
do
{
/* используем контекстные переменные для отслеживания за тем, сколько задач выполнилось */
$done = 0;
$gmclient->addTaskStatus($handles[0], &$done);
$gmclient->addTaskStatus($handles[1], &$done);
$gmclient->runTasks();
echo "Выполнено: $done\n";
sleep(1);
}
while ($done != 2);
function reverse_status($task, $done)
{
if (!$task->isKnown())
$done++;
}
?>
Вывод приведённого примера будет похож на:
Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 0 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 1 Выполнено: 2