public bool GearmanJob::sendStatus (int $numerator , int $denominator)
envía información de estado para el servidor de trabajo y cualquier cliente de escucha. Use esto para especificar qué porcentaje del trabajo se ha completado.
Para poder usarlo, probablemente también tendrá que modificar un poco el cliente para manejar la comunicación.
Ejemplo
client.php
<?php
global $argc,$argv;
if (!file_exists($argv[1])) {
echo "File not found\n";
exit(1);
}
$gmclient= new GearmanClient();
$gmclient->addServer();
do
{
$result = $gmclient->do("linecount", file_get_contents($argv[1]));
# Check for various return packets and errors.
switch($gmclient->returnCode())
{
case GEARMAN_WORK_STATUS:
list($numerator, $denominator)= $gmclient->doStatus();
echo "Status: " . sprintf("%d%%",($numerator/$denominator)*100)
. " complete\r";
break;
case GEARMAN_SUCCESS:
break;
}
}
while($gmclient->returnCode() != GEARMAN_SUCCESS);
echo "\nResult: $result\n";
worker.php
<?php
$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("linecount", "linecount");
while ($worker->work());
function linecount($job)
{
$lines = preg_split('/[\r\n]/',
$job->workload(),null,PREG_SPLIT_NO_EMPTY);
$linecount = count($lines);
$n = 0;
foreach ($lines as $line) {
usleep(3000);
$n++;
$job->sendStatus($n,$linecount);
$ret++;
}
return $ret;
}
¿Está funcionando este código? lo pruebo sin ningún éxito – slier
Se probó una vez y se encontró en buen estado junto con gearmand 0,20 en 2011. Ahora que se lanzó gearmand 1.2, es probable que haya cambios en la API entre esos dos lanzamientos. –
u ¿logras obtener el estado en el cliente? la mía no funciona para nada ... la apliageman apenas cambia ... el código funciona bien ... solo me pregunto si tengo una instalación incorrecta del engranaje – slier