Моментальный ответ от Beanstalkd

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Nex-Otaku
Сообщения: 809
Зарегистрирован: 2016.07.09, 21:07

Моментальный ответ от Beanstalkd

Сообщение Nex-Otaku » 2018.04.16, 16:17

Настроил очереди заданий через Beanstalkd, всё работает прекрасно, но вот появилась проблема.

Захотелось поставить ожидание завершения задания (с таймаутом).
Отправляю задачу, жду выполнения, иду дальше.
Но чтобы "лишней" задержки при этом не было.

То есть, если я, например, буду опрашивать в цикле статус задачи, и поставлю задержку в секунду между итерациями, это уже неприемлемо снизит скорость обработки. Потому что на одну задачу "потеряется" секунда, а задач может быть сотни тысяч. Мне нужно, чтобы реакция происходила моментально.

Какие есть варианты это сделать?

Я искал в протоколе beanstalkd и ничего подходящего не нашёл. Это вообще реализуемо?

zelenin
Сообщения: 10582
Зарегистрирован: 2013.04.20, 11:30

Re: Моментальный ответ от Beanstalkd

Сообщение zelenin » 2018.04.16, 20:37

хочешь моментально - делай синхронно в рамках выполнения задачи. не хочешь в рамках задачи - значит допускаешь задержки.

Nex-Otaku
Сообщения: 809
Зарегистрирован: 2016.07.09, 21:07

Re: Моментальный ответ от Beanstalkd

Сообщение Nex-Otaku » 2018.05.02, 13:37

Я видимо непонятно объяснил.

Есть два процесса, которые синхронизируются между собой через Beanstalk.
У самого бинстока есть только методы "поглядеть чего уже есть в очереди" и "дождаться новой задачи". То есть мы "моментально" можем поймать только начало - поступление задачи в очередь, но не её завершение - удаление из очереди.

А мне требуется отследить, когда задача была завершена. Можно активно опрашивать очередь по интервалам, но тогда я потеряю в скорости обработки, а для моей задачи это критично.

Впрочем, кажется, я эту проблему решил - придумал, как настроить "обратные" tubes, чтобы в них прилетали уведомления через тот же бинсток. Пока ещё не тестировал, но по идее должно сработать.

Ответить