Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 05.01.2017 13:55:59

Как организовать параллельное выполнение задач с redis в laravel?

Нужно запускать параллельные задачи в фоне. Выполнение каждой задачи занимает несколько часов.
Для этого я так понял в laravel используются очереди, но каждая задача выполняется по-очереди, а мне нужно их запускать параллельно. Как можно не дожидаясь выполнения одной задачи, сразу запускать следующую в фоне? Может я вообще не туда копаю и нужно использовать для этого что-то другое?

Запускаются задачи так:

            $job = (new \App\Jobs\name_task($params))->delay(1);
            dispatch($job);

Так слушаю:

php artisan queue:listen redis --timeout=0

p.s. вычитал в мануале, что задачи выполняются все-таки последовательно в очередях. Тогда получается нужно запускать несколько очередей для решения этой задачи? Как это сделать?

Изменено Chinyaev (05.01.2017 14:01:40)

Не в сети

#2 05.01.2017 15:11:10

Re: Как организовать параллельное выполнение задач с redis в laravel?

Если не будет советов, как что-то Ларавел-овское использовать - используй сокеты.

Не в сети

#3 05.01.2017 15:58:03

Re: Как организовать параллельное выполнение задач с redis в laravel?

слишком много задач параллельно – тоже не очень хорошо, ресурсы сервера всё таки ограничены. если мне не изменяет память, в документации ларавеля в разделе про очереди есть пример конфига для supervisord с запуском нескольких воркеров одновременно. в этом случае количество параллельно выполняемых задач будет определяться количеством воркеров.

ещё небольшой совет – если выполняешь много «долгоиграющих» задач, то может получиться ситуация когда все воркеры заняты и надолго. если при этом в очереди появляются «короткие» задачи (например если пользуешься Mail::queue), которые можно и нужно быстро выполнить – они будут зависать и слишком долго ждать своей очереди. в этом случае лучше выносить длинные задачи в отдельную именованную очередь и обрабатывать её отдельными воркерами.

Не в сети

Подвал раздела