Русское сообщество разработки на PHP-фреймворке 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)
Не в сети
Если не будет советов, как что-то Ларавел-овское использовать - используй сокеты.
Не в сети
слишком много задач параллельно – тоже не очень хорошо, ресурсы сервера всё таки ограничены. если мне не изменяет память, в документации ларавеля в разделе про очереди есть пример конфига для supervisord с запуском нескольких воркеров одновременно. в этом случае количество параллельно выполняемых задач будет определяться количеством воркеров.
ещё небольшой совет – если выполняешь много «долгоиграющих» задач, то может получиться ситуация когда все воркеры заняты и надолго. если при этом в очереди появляются «короткие» задачи (например если пользуешься Mail::queue), которые можно и нужно быстро выполнить – они будут зависать и слишком долго ждать своей очереди. в этом случае лучше выносить длинные задачи в отдельную именованную очередь и обрабатывать её отдельными воркерами.
Не в сети