Есть таблица в бд, в которую добавляются задачи. Хотелось бы, чтобы постоянно крутилось в фоне X процессов, которые по мере поступления задач выполняли их и засыпали, когда задач нет. Либо чтобы крутился один процесс, который следил за появлением новых задач и если нужно, поднимал обработчики. Процессы (обработчики) должны работать параллельно, независимо друг от друга.
Задачи могут выполняться долго, по 5 минут.
Прошу подсказать простейший способ это реализовать, если такой возможен, ну и правильный способ.
В идеале хотелось бы обойтись без добавления сторонних библиотек, либо самый минимум.
Хостинг, вдска.
Любой менеджер задач подойдет, правда, там немного будет другой способ постановки задач, тем не менее...
Гуглите в сторону RabbitMQ или Gearman. К сожалению, без установки сторонних библиотек нормально реализовать данный функционал не получится.
Для правильного вопроса надо знать половину ответа
Простейший способ - запускаемый раз в минуту по 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;
И периодически проверять слишком долго выполняющиеся задачи.