2016-04-22 2 views
0

У меня возникла проблема с моим приложением для сельдерея django. Предположим, что у меня есть две связанные модели - транзакция и учетная запись. Я нажимаю транзакции поверх своего API. То, что я хочу достичь, - это рассчитать баланс для указанной учетной записи.Приложение Django Celery с таймером

У меня есть задача сельдерея, которая вычисляет баланс. Проблема в том, что мне нужен таймер на каждую учетную запись, установленную, например. 60 секунд. Когда транзакция идет на тот же счет, таймер снова устанавливается на 60. Я хочу сделать это так, потому что я не хочу запускать ту же задачу много раз. Когда транзакции для указанной учетной записи не появятся в течение 60 секунд, тогда задача должна быть выполнена.

Любые архитектурные предложения, как это достичь? На самом деле, я понятия не имею, как настроить эти «таймеры».

Спасибо за ответы!

ответ

0

Вы можете следить за порядком django-celery-transactions. Они subclass the Task class, чтобы логика выполнения была настроена.

Для вашего случая, вы должны настроить apply_async, чтобы проверить, будут ли поставлены задачи в очереди в течение следующих 60 секунд (для этого вы будете использовать Celery API for inspecting workers). Если существует запланированная задача, вы можете игнорировать выполнение текущей задачи; если нет, установите время выполнения в 60 секунд в будущем и вызовите с ним метод super().apply_async(...).

Смежные вопросы