(PECL gearman >= 0.5.0)
GearmanClient::doBackground — Ejecuta una tarea en segundo plano
$function_name
, string $workload
[, string $unique
] )Ejecuta una tarea en segundo plano, retornando el manejador del trabajo que puede ser usado para obtener el estado de la tarea en ejecución.
function_name
Función registrada que ejecutará el worker
workload
Datos serializados a ser procesados
unique
ID único para identificar una tarea en particular
El manejador de la tarea enviada.
Ejemplo #1 Envío y monitorización de un trabajo en segundo plano
El trabajador de este ejemplo tiene un retardo artificial introducido para imitar un trabajo de larga duración. El script cliente comprueba periódicamente el estado del trabajo en ejecución.
<?php
/* Creamos el objeto */
$gmclient= new GearmanClient();
/* Añade el servidor por defecto */
$gmclient->addServer();
/* Ejecuta un cliente "reverse" */
$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";
?>
El resultado del ejemplo sería algo similar a:
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!