GearmanClient::addTask

(PECL gearman >= 0.5.0)

GearmanClient::addTaskДобавить задачу, которая будет выполнена в параллельном режиме

Описание

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

Добавляет задачу для параллельной работы с другими задачами. Вызовите этот метод для всех задач, которые будут работать параллельно, а затем вызовите GearmanClient::runTasks() для выполнения работ. Обратите внимание, что должно быть достаточное количество работников для одновременного выполнения всех задач.

Список параметров

function_name

Зарегистрированная функция, вызываемая рабочим процессом

workload

Сериализованные данные, подлежащие обработке

context

Контекст приложения, связываемый с задачей

unique

Уникальный ID, назначаемый определенной задаче

Возвращаемые значения

Объект GearmanTask или FALSE, если задача не может быть добавлена.

Примеры

Пример #1 Основное представление двух задач

<?php

# Создаем нашего клиента
$gmclient= new GearmanClient(); 

# Добавляем сервер задач по умолчанию
$gmclient->addServer(); 

# Устанавливаем функцию, которая будет вызвана по завершению работы
$gmclient->setCompleteCallback("complete"); 

# Добавляем задачу для выполнения функции reverse, переворачивающей строку "Hello World!"
$gmclient->addTask("reverse""Hello World!"null"1"); 

# Добавляем другую задачу, для выполнения функции reverse, переворачивающей строку "!dlroW olleH"
$gmclient->addTask("reverse""!dlroW olleH"null"2");

# Выполняем задачи
$gmclient->runTasks(); 

function 
complete($task

  print 
"Выполнено: " $task->unique() . ", " $task->data() . "\n"
}

?>

Результатом выполнения данного примера будет что-то подобное:

Выполнено: 2, Hello World!
Выполнено: 1, !dlroW olleH

Пример #2 Основное представление двух задач с передачей контекста приложения

<?php

$client 
= new GearmanClient();
$client->addServer();

# Устанавливаем функцию, которая будет вызвана по завершению работы
$client->setCompleteCallback("reverse_complete");

# Добавим несколько задач и местоположение результатов
$results = array();
$client->addTask("reverse""Hello World!", &$results"t1");
$client->addTask("reverse""!dlroW olleH", &$results"t2");

$client->runTasks();

# Результаты должны быть заполнены из обратного вызова
foreach ($results as $id => $result)
   echo 
$id ": " $result['handle'] . ", " $result['data'] . "\n";


function 
reverse_complete($task$results)
{
   
$results[$task->unique()] = array("handle"=>$task->jobHandle(), "data"=>$task->data());
}

?>

Результатом выполнения данного примера будет что-то подобное:

t2: H.foo:21, Hello World!
t1: H:foo:22, !dlroW olleH

Смотрите также