На этом сайте пользователи могут запускать долго выполняющиеся задачи. Я использую Symfony Messenger для асинхронного запуска этих задач в фоновом режиме, в то время как пользователь может делать другие вещи на сайте. Когда задача выполнена, они уведомляются о результатах. Я использую Supervisor, чтобы сохранить несколько рабочих (
Код: Выделить всё
messenger:consume
Пользователи могут отменить свои задачи досрочно. Обычно это происходит, когда они понимают, что допустили ошибку при выполнении задачи, и хотят ее исправить. Проблема в том, что я не знаю, как заставить сервер отменить текущего работника. Единственный способ, который я могу придумать, чтобы убить работающего работника, — это вызвать команду supervisctl, чтобы остановить или перезапустить процесс. Но я не могу найти в Symfony способ точно определить, какой работник обрабатывает данную задачу.
Мое текущее решение — игнорировать старую задачу и запустить новую для обработки новый запрос пользователя. Затем старая задача продолжает работать в фоновом режиме до тех пор, пока не завершится. Очевидно, что это огромная трата ресурсов сервера. Иногда пользователи отменяют и перезапускают задачу несколько раз подряд, что приводит к тому, что группа работников тратит ресурсы без уважительной причины.
Должен быть лучший способ. Что мне не хватает?
Подробнее здесь: https://stackoverflow.com/questions/792 ... n-progress