Celery + Django
У меня на бэкенде есть функционал оповещений. Раз в час скрип проходит по записям в БД и обновляет информацию по товарам. Если определенная информация изменилась (Это может быть цена или остаток на складе), то создается таск на оповещение, пример:
# создания таска для оповещения пользователю
if price != self.price:
check_notifications.delay(poduct_id=self.pk, old_price=self.price, new_price=price)
В самом таске формируется сообщение на почту для определённой группы пользователей, исходя из полученных данных.
Столкнулся с такой проблемой. Товаров более 1млн, остаток может меняться часто и получается что раз в час почта разрывается от количества сообщений.
Какое решения я вижу: формирования списка товаров, у которых изменилась информация, по завершении скрипта формируется уже одно сообщение в котором скажем 1000 товаров, а не 1000 раздельных сообщений
Как в celery сформировать список тасков с каким-нибудь пояснением или флагом, который будет их объединять? Как такой список передать в функцию для создания сообщения? Как после завершения скрипта вызывать функцию, которая объединит информацию из всех тасков?
Буду очень благодарен за любую помощь
Ответы (1 шт):
Проще создать например модель message и fk на пользователя или группу. И в celery просто создавать запись в message. А потом уже отдельным таском бежать по пользователям и отдельным таском отправлять все сообщения разом пользователю или группе. Если надо можно их тут же удалять, чтобы не засорять БД