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
]] ) : GearmanTaskAjoute 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
Exemples
Exemple #1 2 tâches dont une en arrière-plan
Cet exemple montre la différence entre l'exécution en arrière-plan et une exécution normale. Le client ajoute 2 tâches qui doivent exécuter la même fonction, mais une a été ajoutée avec la méthode addTaskBackground(). Une fonction de rappel est définie afin de surveiller la progression du travail. Un agent simple avec un délai artificiel rapporte la progression et le client la traite via la fonction de rappel. 2 agents sont exécutés dans cet exemple. Notez que la tâche en arrière-plan n'est pas affichée par le client.
<?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) Envoi du statut : 1/12 complete Envoi du statut : 2/12 complete Envoi du statut : 2/12 complete Envoi du statut : 3/12 complete Envoi du statut : 3/12 complete Envoi du statut : 4/12 complete Envoi du statut : 4/12 complete Envoi du statut : 5/12 complete Envoi du statut : 5/12 complete Envoi du statut : 6/12 complete Envoi du statut : 6/12 complete Envoi du statut : 7/12 complete Envoi du statut : 7/12 complete Envoi du statut : 8/12 complete Envoi du statut : 8/12 complete Envoi du statut : 9/12 complete Envoi du statut : 9/12 complete Envoi du statut : 10/12 complete Envoi du statut : 10/12 complete Envoi du statut : 11/12 complete Envoi du statut : 11/12 complete Envoi du statut : 12/12 complete Envoi du statut : 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
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-gearmanclient.addtaskbackground.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.