Gearman (2) — асинхронный вызов

| 1 комментарий

Простейший синхронный вызов методов, предоставляемых воркерами geramand, не так интересен, как асинхронный, тем более, что работа может выполняться на другой машине и на время выполнения задачи нет смысла останавливать процесс.

Gearman::Client предоставляет возможность установить обработчики, которые будут вызваны по завершении задачи (или после неудачи).

Чтобы воспользоваться этим механизмом, требуется создать набор задач (task set), и добавить в него задачу, указав адрес колбека.

#!/usr/bin/perl

use v5.10;
use strict;
use Gearman::Client;

my $client = new Gearman::Client;
$client->job_servers('example.com:4730');

my $tasks = $client->new_task_set;
$tasks->add_task(
    'echo' => 10,
    {
        on_complete => \&completed
    }
);

$tasks->wait;

sub completed {
    my $result = shift;
    say $$result;
}

Функция completed получает ссылку на данные, которые возвращает соответствующий воркер.

Если необходимо дождаться результата, нужно на наборе задач вызвать метод wait. Иначе колбек не будет инициирован (хотя задача и выполнится).

1 комментарий

Кстати, надо использовать Gearman::XS "A Perl module that wraps the libgearman C library."

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 02.12.2009 23:04. Автор — ash.

Предыдущая запись — Gearman (1) — установка и запуск

Следующая запись — Moscow.pm offline #17

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.