Я пытаюсь использовать функцию post_save для Django Signals в сочетании с задачами Celery. После того, как новый объект сообщения будет сохранен в базе данных, я хочу оценить, имеет ли экземпляр один из двух атрибутов, и если это так, вызовите функцию send_sms_function, которая является зарегистрированной сельдерием.Selery + Django Signals
tasks.py
from my_project.celery import app
@app.task
def send_sms_message(message):
# Do something
signals.py
from django.db.models.signals import post_save
from django.dispatch import receiver
import rollbar
rollbar.init('234...0932', 'production')
from dispatch.models import Message
from comm.tasks import send_sms_message
@receiver(post_save, sender=Message)
def send_outgoing_messages(sender, instance, **kwargs):
if instance.some_attribute == 'A' or instance.some_attribute == 'B':
try:
send_sms_message.delay(instance)
except:
rollbar.report_exc_info()
else:
pass
Я проверяю это локально, запустив сельдерей работника. Когда я нахожусь в оболочке Django и вызываю функцию Сельдерея, он работает так, как ожидалось. Однако, когда я сохраняю экземпляр Message в базе данных, функция делает не работает должным образом: в очередь задач ничего не отправлено, и я не вижу сообщений об ошибках.
Что я делаю неправильно?
Thanks @ dm03514 Я обновил свой код здесь и запускал его локально, но функция 'send_sms_message' все еще не попадает в очередь задач и не запускает. Любые другие идеи о том, что я делаю неправильно? –
Мне показалось, что я где-то читал, что вы не должны создавать запросы из экземпляра attr, но не знаете, почему это так, или если это правда. Просто мысль. –