gpt4 book ai didi

django - 使用 celery 更新 Django 模型字段时避免递归 save()

转载 作者:行者123 更新时间:2023-12-02 11:21:45 26 4
gpt4 key购买 nike

我正在重写模型的 save() 方法以使用 Celery 调用异步任务。该任务还保存了模型,因此我最终遇到了重复调用 Celery 任务的递归情况。代码如下:

模型的保存方法:

def save(self, *args, **kwargs):
super(Route, self).save(*args, **kwargs)
from .tasks import get_elevation_data
get_elevation_data.delay(self)

获取高程数据任务:

from celery.decorators import task

@task()
def get_elevation_data(route):
...
route.elevation_data = results
route.save()

如何避免这种递归?

最佳答案

添加一个关键字参数,告诉 save 不要递归:

 def save(self, elevation_data=True, *args, **kwargs):
super(Route, self).save(*args, **kwargs)
if elevation_data:
from .tasks import get_elevation_data
get_elevation_data.delay(self)

然后:

 from celery.decorators import task

@task()
def get_elevation_data(route):
...
route.elevation_data = results
route.save(elevation_data=False)

关于django - 使用 celery 更新 Django 模型字段时避免递归 save(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6180843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com