【问题标题】:Object not being saved in Celery task对象未保存在 Celery 任务中
【发布时间】:2020-02-03 04:15:46
【问题描述】:

我正在使用celery=4.3 Django 包和 Django 2.2.6。

当我尝试从 celery 任务函数更新对象时,我注意到该对象没有保存

@app.task
def update_object(object_id, points):
    object = MyObject.objects.get(pk=object_id)
    object.update_points(points)

我的对象如下所示:

class MyObject(models.Model):
    ....

    def update_points(self, points):
        self.points += points
        self.save()

我正在调用 celery 任务: update_object.delay(object_id, points)

这不起作用:/有人有什么建议吗?

【问题讨论】:

    标签: django django-models celery


    【解决方案1】:

    您可以尝试使用update_object.delay((object_id, points)),参数为元组。
    通常,您需要传递 *args 和 **kwargs (see this doc)

    快速备忘单

    T.delay(arg, kwarg=value)
        Star arguments shortcut to .apply_async. (.delay(*args, **kwargs) calls .apply_async(args, kwargs)).
    
    T.apply_async((arg,), {'kwarg': value})
    
    T.apply_async(countdown=10)
        executes in 10 seconds from now.
    
    T.apply_async(eta=now + timedelta(seconds=10))
        executes in 10 seconds from now, specified using eta
    
    T.apply_async(countdown=60, expires=120)
        executes in one minute from now, but expires after 2 minutes.
    
    T.apply_async(expires=now + timedelta(days=2))
        expires in 2 days, set using datetime.
    

    【讨论】:

    • 这是页面下方的内容task.delay(arg1, arg2, kwarg1='x', kwarg2='y')
    猜你喜欢
    • 2021-02-21
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2016-10-14
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多