GearmanClient::addTaskBackground
(PECL gearman >= 0.5.0)
GearmanClient::addTaskBackground — Ajoute une tâche d'arrière-plan pour une exécution en parallèle
Description
$function_name
, string $workload
[, mixed &$context
[, string $unique
]] )Ajoute une tâche d'arrière-plan pour une exécution en parallèle d'autres tâches. Appelez cette méthode pour toutes les tâches à exécuter en parallèle, puis, appelez la méthode GearmanClient::runTasks() pour réaliser les tâches.
Liste de paramètres
-
function_name -
Une fonction enregistrée que le travailleur va exécuter
-
workload -
Données linéarisées à analyser
-
context -
Contexte de l'application à associer avec une tâche
-
unique -
Un identifiant unique utilisé pour identifier une tâche particulière
Valeurs de retour
Un objet GearmanTask ou FALSE si la tâche
n'a pu être ajoutée.
Exemples
Exemple #1 2 tâches dont une en arrière-plan
<?php
# Le script client
# Crée un client Gearman
$gmc= new GearmanClient();
# Ajoute un serveur de travaux par défaut
$gmc->addServer();
# Définit 2 fonctions de rappel afin de surveiller la progression
$gmc->setCompleteCallback("reverse_complete");
$gmc->setStatusCallback("reverse_status");
# Ajoute une tâche pour la fonction "reverse"
$task= $gmc->addTask("reverse", "Hello World!", null, "1");
# Ajoute une autre tâche, mais cette fois, en arrière-plan
$task= $gmc->addTaskBackground("reverse", "!dlroW olleH", null, "2");
if (! $gmc->runTasks())
{
echo "ERREUR " . $gmc->error() . "\n";
exit;
}
echo "FAIT\n";
function reverse_status($task)
{
echo "STATUT : " . $task->unique() . ", " . $task->jobHandle() . " - " . $task->taskNumerator() .
"/" . $task->taskDenominator() . "\n";
}
function reverse_complete($task)
{
echo "TERMINÉ : " . $task->unique() . ", " . $task->data() . "\n";
}
?><?php
# Le script de l'agent
echo "Début\n";
# Crée un agent.
$gmworker= new GearmanWorker();
# Ajoute un serveur par défaut (localhost).
$gmworker->addServer();
# Enregistre la fonction "reverse" sur ce serveur.
$gmworker->addFunction("reverse", "reverse_fn");
print "Attente d'un travail...\n";
while($gmworker->work())
{
if ($gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $gmworker->returnCode() . "\n";
break;
}
}
function reverse_fn($job)
{
echo "Travail reçu : " . $job->handle() . "\n";
$workload = $job->workload();
$workload_size = $job->workloadSize();
echo "Charge de l'agent : $workload ($workload_size)\n";
# Cette boucle n'est pas nécessaire, mais permet de comprendre le fonctionnement
for ($x= 0; $x < $workload_size; $x++)
{
echo "Envoi du statut : " . ($x + 1) . "/$workload_size complete\n";
$job->sendStatus($x+1, $workload_size);
$job->sendData(substr($workload, $x, 1));
sleep(1);
}
$result= strrev($workload);
echo "Résultat : $result\n";
# On retourne au client ce que l'on veut.
return $result;
}
?>L'agent affiche, pour les 2 travaux :
Travail reçu : H:foo.local:65 Charge de l'agent : !dlroW olleH (12) 1/12 complete Travail reçu : H:foo.local:66 Charge de l'agent : Hello World! (12) 1/12 complete 2/12 complete 2/12 complete 3/12 complete 3/12 complete 4/12 complete 4/12 complete 5/12 complete 5/12 complete 6/12 complete 6/12 complete 7/12 complete 7/12 complete 8/12 complete 8/12 complete 9/12 complete 9/12 complete 10/12 complete 10/12 complete 11/12 complete 11/12 complete 12/12 complete 12/12 complete Résultat : !dlroW olleH Résultat : Hello World!
Affichage du client :
STATUT : 1, H:foo.local:66 - 1/12 STATUT : 1, H:foo.local:66 - 2/12 STATUT : 1, H:foo.local:66 - 3/12 STATUT : 1, H:foo.local:66 - 4/12 STATUT : 1, H:foo.local:66 - 5/12 STATUT : 1, H:foo.local:66 - 6/12 STATUT : 1, H:foo.local:66 - 7/12 STATUT : 1, H:foo.local:66 - 8/12 STATUT : 1, H:foo.local:66 - 9/12 STATUT : 1, H:foo.local:66 - 10/12 STATUT : 1, H:foo.local:66 - 11/12 STATUT : 1, H:foo.local:66 - 12/12 TERMINÉ : 1, !dlroW olleH FAIT
Voir aussi
- GearmanClient::addTask() - Ajoute une tâche à exécuter en parallèle
- GearmanClient::addTaskHigh() - Ajoute une tâche de forte priorité à effectuer en parallèle
- GearmanClient::addTaskLow() - Ajoute une tâche de faible priorité à effectuer en parallèle
- GearmanClient::addTaskHighBackground() - Ajoute une tâche de fond de forte priorité à effectuer en parallèle
- GearmanClient::addTaskLowBackground() - Ajoute une tâche de fond de faible priorité à effectuer en parallèle
- GearmanClient::runTasks() - Exécute une liste de tâches en parallèle
