(PECL gearman >= 0.5.0)
GearmanClient::doBackground — Ejecuta una tarea en segundo plano
$function
, string $workload
, ?string $unique
= null
): stringEjecuta una tarea en segundo plano, devuelve el gestor de trabajos que podrá ser utilizado para recuperar el estado de la tarea en curso.
function
Función registrada que ejecutará el worker
workload
Datos serializados a ser procesados
unique
ID único para identificar una tarea en particular
El gestor de trabajos para la tarea enviada.
Ejemplo #1 Envía y supervisa un trabajo en segundo plano
El agente de este ejemplo tiene un retraso artificial introducido para simular un trabajo cuya ejecución tarda mucho tiempo. El script del cliente verifica periódicamente el estado del trabajo en curso.
<?php
/* Crea un cliente */
$gmclient= new GearmanClient();
/* Añade un servidor por omisión */
$gmclient->addServer();
/* Ejecuta el cliente */
$job_handle = $gmclient->doBackground("reverse", "this is a test");
if ($gmclient->returnCode() != GEARMAN_SUCCESS)
{
echo "Código de retorno erróneo\n";
exit;
}
$done = false;
do
{
sleep(3);
$stat = $gmclient->jobStatus($job_handle);
if (!$stat[0]) // la tarea es conocida por lo que no está terminada
$done = true;
echo "Ejecución : " . ($stat[1] ? "true" : "false") . ", numerador : " . $stat[2] . ", denominador : " . $stat[3] . "\n";
}
while(!$done);
echo "hecho !\n";
?>
El resultado del ejemplo sería algo similar a:
Ejecución : true, numerador : 3, denominador : 14 Ejecución : true, numerador : 6, denominador : 14 Ejecución : true, numerador : 9, denominador : 14 Ejecución : true, numerador : 12, denominador : 14 Ejecución : false, numerador : 0, denominador : 0 hecho !