Простой пример внедрения Gearman. Часть 3

| Комментариев: 2

Теперь настало время передвать более сложные аргументы, чем простые строки. Нет ничего проще — use Storable.

Перед тем, как передать задачу воркерам, упаковываем аргументы:

my $c = 0;
for (qw (red orange yellow green blue violet)) {
    $tasks->add_task(
       'search' => freeze([$c++, "$_ $text"]),
       {
         on_complete => \&search_completed
       }
    );
}

А внутри функции воркера — распаковываем:

my $request = thaw($job->arg);
my $result = MySearch::search($request->[1]);

После того, как получен результат, с ним потребуется произвести те же манипуляции, но в обратную сторону: заморозить (freeze) результат, вернуть серверу gearmand, а на клиентре — растопить (thaw).

Правда или нет, но передача данных от воркера в вызывающую задачу — глючит (особенно в Gearman::XS::Worker), да и бесконечные freeze/thaw только уродуют код. Намного удобнее, если воркер не будет ничего возвращать, а вместо этого складировать свои результаты в общее хранилище (например, в базу данных), доступное вызывающему приложению.

Комментариев: 2

Спасибо за серию статей про Gearman, очень интересно!

А почему в заголовках написано Gera*** а не Gear***? Это феншуй или опечатка?

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

Страницы

  • img

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

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

Предыдущая запись — Простой пример внедрения Gearman. Часть 2

Следующая запись — Пятничный лучок

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