对象未保存在 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 任务中的主要内容,如果未能解决你的问题,请参考以下文章
Django 模型没有保存到 Celery Task 中的数据库中
Django ElasticSearch Celery 任务模型调用返回“str”对象不可调用