如果相关对象不存在,则撤销排队的任务

Revoke a queued task if the related object does not exist

我正在尝试删除在创建对象时触发的排队任务(使用 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在创建后立即被删除时,相关的排队消息也应该被撤销。

知道如何处理这个问题吗?

我通过将对象 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