对象未保存在 Celery 任务中

Posted

技术标签:

【中文标题】对象未保存在 Celery 任务中【英文标题】:Object not being saved in Celery task 【发布时间】: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)

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

【问题讨论】:

【参考方案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')

以上是关于对象未保存在 Celery 任务中的主要内容,如果未能解决你的问题,请参考以下文章

带有 Celery 的 Django - 未找到现有对象

Django 模型没有保存到 Celery Task 中的数据库中

Django ElasticSearch Celery 任务模型调用返回“str”对象不可调用

如何在 Django 模型中使用 celery beat 为每个对象创建单独的任务

如何将 django 对象发送到 celery 任务?

celery 任务的实时进度跟踪