Ajoute une tâche d'arrière-plan pour une exécution en parallèle

# 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

public GearmanClient::addTaskBackground ( string `$function_name` , string `$workload` [, mixed `&$context` [, string `$unique` ]] ) : GearmanTask

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

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