【发布时间】:2020-12-23 12:21:54
【问题描述】:
我有一个task,它要在一个对象的POST 或PATCH 之后执行,比如ABC
代码如下:
models.py
class ABC(models.Model):
start_at = models.DateTimeField()
task.py
@app.task
def do_something(obj_id):
try:
abc = ABC.objects.get(id=obj_id)
except ObjectDoesNotExist:
return
eta = settings.ETA
do_something.apply_async([abc.id], eta=eta)
return
views.py
class ABCPost(CreateAPIView):
serializer_class = ABCSerializer
def post(self, request):
# create object
# call task do_something
def patch(self, request):
# update the `start_at` field for ABC
# call task do_something
因此,当字段更新时,排队的消息应该以更新后的start_at 值执行。但是,对于上面的代码,两条消息为同一个对象排队,但时间戳不同。我怎样才能避免这种情况?
提前致谢
【问题讨论】: