(PECL gearman >= 0.5.0)
GearmanClient::addTask — Añade una tarea para ser ejecutada en paralelo
Añade una tarea para ser ejecutada en paralelo con otras tareas. Debe llamarse a este método en todas las tareas que van a ejecutarse en paralelo y, entonces, llamar a GearmanClient::runTasks() para realizar el trabajo. Notar que se necesitan al menos tantos trabajadores como tareas para que puedan ejecutarse todos en paralelo de forma simultánea.
Función registrada que ejecutará el worker
Datos serializados a ser procesados
Aplicación context a asociar con la tarea
ID único para identificar una tarea en particular
Un objeto GearmanTask o FALSE si no se puede añadir la tarea.
Example #1 Envío básico de dos tareas
<?php
# Crear el servidor Gearman
$gmclient= new GearmanClient();
# Añade el servidor por defecto
$gmclient->addServer();
# Añade una tarea que ejecuta la función "reverse" al string "Hello World!"
$gmclient->addTask("reverse", "Hello World!", null, "1");
# Añade otra tarea para ejecutar la función "reverse" en el string "!dlroW olleH"
$gmclient->addTask("reverse", "!dlroW olleH", null, "2");
# Establece una función a ser llamada cuando se complete el trabajo
$gmclient->setCompleteCallback("complete");
# Ejecuta las tareas
$gmclient->runTasks();
function complete($task)
{
print "COMPLETE: " . $task->unique() . ", " . $task->data() . "\n";
}
?>
El resultado del ejemplo sería algo similar a:
COMPLETE: 2, Hello World! COMPLETE: 1, !dlroW olleH
Example #2 Envío básico de dos tareas pasando contexto de la aplicación
<?php
$client = new GearmanClient();
$client->addServer();
# Añade algunas tareas y provee de un lugar donde poner los resultados
$results = array();
$client->addTask("reverse", "Hello World!", &$results, "t1");
$client->addTask("reverse", "!dlroW olleH", &$results, "t2");
$client->setCompleteCallback("reverse_complete");
$client->runTasks();
# Los resultados deberían estar rellenos
foreach ($results as $id => $result)
echo $id . ": " . $result['handle'] . ", " . $result['data'] . "\n";
function reverse_complete($task, $results)
{
$results[$task->unique()] = array("handle"=>$task->jobHandle(), "data"=>$task->data());
}
?>
El resultado del ejemplo sería algo similar a:
t2: H.foo:21, Hello World! t1: H:foo:22, !dlroW olleH