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

| Нет комментариев

Переделка скрипта для работы с Gearman весьма проста, если решение задачи запрограммировано таким образом, чтобы у нее были только вход и выход :-) В случае со вчерашним примером функция поиска, помещенная в воркер, состоит из двух строк:

sub search {
    my $job = shift;

    return MySearch::search($job->arg);
}

Клиентский код несколько усложняется: сначала необходимо создать пул задач, а затем дождаться их выполнения:

for (qw (red orange yellow green blue violet)) {
    $tasks->add_task(
        'search' => "$_ $text",
        {
            on_complete => \&search_completed
        } 
    );
}
$tasks->wait;

Сбор данных по окончании каждой задачи тоже крайне прост:

sub search_completed {
    my $result = shift;
   
    $html_result .= $$result;
}

Теперь осталось запустить с десяток отдельных воркеров, и скорость работы тестового скрипта возрастает на порядок: последовательные запросы на поиск картинок шести цветов зарубежной радуги завершались за 1-3 секунды, после модернизации — за 0,1-0,6. Задачи параллелятся на ура, но важно понимать, что это имеет смысл только для тех задач, которые по своей природе проводят много времени в ожидании ответа, не тратя процессорное время локальной машины.

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

Страницы

  • img

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

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

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

Следующая запись — Простой пример внедрения Gearman. Часть 3

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