@alx1987

Как организовать обработку очереди задач?

Есть таблица в бд, в которую добавляются задачи. Хотелось бы, чтобы постоянно крутилось в фоне X процессов, которые по мере поступления задач выполняли их и засыпали, когда задач нет. Либо чтобы крутился один процесс, который следил за появлением новых задач и если нужно, поднимал обработчики. Процессы (обработчики) должны работать параллельно, независимо друг от друга.
Задачи могут выполняться долго, по 5 минут.

Прошу подсказать простейший способ это реализовать, если такой возможен, ну и правильный способ.
В идеале хотелось бы обойтись без добавления сторонних библиотек, либо самый минимум.
Хостинг, вдска.

Заранее спасибо.
  • Вопрос задан
  • 250 просмотров
Пригласить эксперта
Ответы на вопрос 3
Akdmeh
@Akdmeh
PHP, Yii2, Music
Любой менеджер задач подойдет, правда, там немного будет другой способ постановки задач, тем не менее...
Гуглите в сторону RabbitMQ или Gearman. К сожалению, без установки сторонних библиотек нормально реализовать данный функционал не получится.
Ответ написан
Комментировать
@Nc_Soft
Ларавел умеет это из коробки
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Простейший способ - запускаемый раз в минуту по cron процесс, проверяющий список задач и запускающий исполнителей. Выборку из базы можно делать комбинацией
SET @id = 0;
UPDATE `tasks` 
  SET `state` = 'execute', `starttime` = NOW()
  WHERE @id := `id` AND `state` = 'new' 
  ORDER BY `time` 
  LIMIT 1;
SELECT * FROM `tasks` WHERE `id` = @id;

И периодически проверять слишком долго выполняющиеся задачи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы