GearmanClient::addTaskBackground

(PECL gearman >= 0.5.0)

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

Description

public GearmanTask GearmanClient::addTaskBackground ( string $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

LoadingChargement en cours