如果相关对象不存在,则撤销排队的任务
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
我正在尝试删除在创建对象时触发的排队任务(使用 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