(PECL gearman >= 0.5.0)
GearmanClient::addTaskStatus — Añade una tarea para obtener el estado
Usado para pedir información de estado del servidor Gearman que llamará a la función de retorno especificada (usando el método GearmanClient::setStatusCallback()).
job_handle
Manejador de la tarea a obtener el estado
context
Datos a pasar en la llamada a la función de retorno para el estado, generalmente una referencia a un array u objeto.
Un objeto GearmanTask.
Ejemplo #1 Monitor para el estado de finalización de múltiples tareas en segundo plano
Se introduce un retardo artificial en el trabajador del ejemplo para simular un proceso de larga duración. Únicamente se ejecuta un trabajador para este ejemplo.
<?php
/* Creamos el objeto */
$gmclient= new GearmanClient();
/* Añadimos el servidor por defecto */
$gmclient->addServer();
/* Iniciamos varios trabajos en segundo plano y grabamos los manejadores */
$handles = array();
$handles[0] = $gmclient->doBackground("reverse", "Hello World!");
$handles[1] = $gmclient->doBackground("reverse", "!dlroW olleH");
$gmclient->setStatusCallback("reverse_status");
/* Preguntamos constantemente al servidor para ver cuándo terminan los trabajos.
/* mejor método sería usar llamadas de retorno en los eventos */
do
{
/* Usar la variable en contexto para seguir cuántas tareas han finalizado */
$done = 0;
$gmclient->addTaskStatus($handles[0], &$done);
$gmclient->addTaskStatus($handles[1], &$done);
$gmclient->runTasks();
echo "Done: $done\n";
sleep(1);
}
while ($done != 2);
function reverse_status($task, $done)
{
if (!$task->isKnown())
$done++;
}
?>
El resultado del ejemplo sería algo similar a:
Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 2