В фильме «13-й этаж» описывалась ситуация, когда смоделированный в компьютере мир создал свой собственный искусственный мир. При работе с Gearman можно столкнуться с задачами, которые в свою очередь удобно разбивать на части и отдавать на обработку следующим воркерам. Причем передача возможна в том числе тому же методу воркера, из которого она инициирована.
Вот пример. У нас есть сервис, отыскивающий по названию город в базе данных. Атомарная работа — поиск города — задача, вынесенная в отдельный воркер. При этом воркер умеет самостоятельно обрабатывать запрос, состоящий из нескольких слов:
my @words = $request =~ m{(\w+)}g;
for my $word (@words) {
place_locality_search_word($word, $response);
}
Если в нашем распоряжении есть достаточное число свободных воркеров (и вычислительные мощности), то этот цикл ничего не мешает переписать так, чтобы он циклически выставлял новые задачи, каждая на отдельное слово. Воркер обязан проверить, что ему передано, и если запрос содержит одно слово, то обработать его самостоятельно.
Важно не забывать, что такая схема требует наличия как минимум двух воркеров (один может быть и занятым при получении начального задания).
На картинке — тестовый результат работы такого рекурсивного механизма для запроса со списком городов с ближайшими Perl-мероприятиями (софия екатеринбург амстердам москва киев vlorë).

P. S. Пока не стал коммитить такое решение :-)
Комментировать