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