@hrvasiliy

Как выполнять задачи в фоне?

Имеется кнопка, по нажатию на которую происходит обновление информации, данное обновление может затянуться на долго... Думаю, как можно реализовать это так, чтобы пользователь нажал на эту кнопку и пошел дальше делать свои дела на сайте.
Придумал 1 вариант: после нажатия на кнопку генерируется запрос в БД (что-то похожее на список дел), сервер постоянно проверяет этот "список дел" и если там что-то есть - выполняет это. Не знаю на сколько удачна такая реализация, хотел бы услышать ваши комментарии и предложения.
  • Вопрос задан
  • 213 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
Ура, вы изобрели очередь. Можно реализовать прямо так как вы описали (не забудьте только у задач сделать отметки со статусом и временем, типа "новое", "в процессе", "выполнено", чтобы одно задание не пошло на исполнение дважды, и проверку не находится ли оно слишком долго в процессе. Ну еще PID испольнителя можно писать, чтоб контролировать живой он там или отвалился уже).

Можно взять что-то серьезное и крутое из готового. типа RabbitMQ или аналогов.

Если это всё не очень критичное, падения этого "долгого" процесса редкие или их можно проигнорировать, то достаточно форкнуть процесс.
Ответ написан
Akdmeh
@Akdmeh
PHP, Yii2, Music
Реализация неплохая, но это если вы точно уверены, что больше подобных задач не будет.
Если возможно расширение списка задач - посмотрите в сторону gearman.org или RabbitMQ
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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