我想删除创建对象时触发的排队任务(使用Celery)。如果要在事件发生前5分钟触发任务并且该对象已被删除,则保留排队的消息。
task.py
@app.task
def send_notification(abc):
# do some stuff with abc
# return something
models.py
class ABC(models.Model):
description = models.TextField()
views.py
def abc(request):
# create the ABC object
send_after=timezone.now() + timedelta(minutes=5)
send_notification.apply_async(eta=send_after)
# return something
因此,当在创建对象ABC之后立即删除该对象ABC时,相关的排队消息也应被吊销。
关于如何处理这个想法吗?
我通过将对象ID传递给任务而不是对象来解决此问题,因此在任务中增加了一行:
@app.task
def send_notification(abc_id):
try:
abc_obj = ABC.objects.get(id=abc_id)
except ObjectDoesnotExist:
return
# do some stuff with abc
# return something