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

2024-01-06

我正在重写模型的 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 celery 更新 Django 模型字段时避免递归 save() 的相关文章

随机推荐

  • 关于 C# 语言规范中隐式转换的问题

    第 6 1 节 隐式转换定义一个身份转换 thusly 身份转换从任何类型转换为相同类型 这种转换的存在使得已经具有所需类型的实体可以说可以转换为该类型 现在 这些句子的目的是什么 在第 6 1 6 节隐式引用转换中 隐式引用转换为 Fro
  • 生成器函数可以用来做什么?

    我开始学习Python 并且遇到了生成器函数 这些函数中包含yield 语句 我想知道这些函数真正擅长解决什么类型的问题 生成器为您提供惰性评估 您可以通过迭代来使用它们 可以显式地使用 for 也可以通过将其传递给任何迭代的函数或构造来隐
  • 为什么我的 OpenMP 实现比单线程实现慢?

    我正在学习 OpenMP 并发性 并尝试了一些现有的代码 在此代码中 我尝试使所有 for 循环并行 然而 这似乎使程序慢得多 至少慢 10 倍 甚至比单线程版本慢得多 这是代码 http pastebin com zyLzuWU2 htt
  • JavaFX TitledPane 查找(.title)返回 null

    我是 Java FX 新手 正在创建一个有趣的应用程序 我正在尝试添加一个TitledPane动态地 并且在尝试查找标题时遇到空指针异常TitledPane大约70 的时间 我尝试为我的问题创建一个简单的演示 但无法在我的应用程序之外重现该
  • 如何迭代四叉树/八叉树

    我很难掌握如何迭代八叉树或四叉树 这可能是因为我没有经历过不同的迭代神话 但假设我生成了一棵四叉树 其中包含 float x y z 双字颜色 现在 我们还可以说这个节点一次只能产生 4 个子节点 并且这些子节点都可以产生 4 个子节点 等
  • 服务器未提供 charset=utf-8 时 Postman utf-8 编码问题

    Spring 已弃用 APPLICATION JSON UTF8 application json charset UTF 8 注释正如他们所说 A String equivalent of link MediaType APPLICATI
  • 是否可以将 UITableView 部分索引中的单词换行?

    我想将单词包装在 UItableView 右侧显示的部分索引中 问题是 如果单词长度增加 部分索引宽度也会增加 并且表视图单元格内容视图大小减小 而且我不想显示部分索引数组对象的子字符串 因为我想在部分 i 中显示整个单词必须把它包裹起来
  • 在 javascript 中实现 document.getElementById

    我正在尝试实现原生document getElementById在 JavaScript 中 我已经实施了document getElementsByClassName在 JavaScript 中 function getElementsB
  • 如何使用 for 循环获取 javascript-value 对象中的最后一项?

    var obj a apple b banana c carrot 如果我做一个 for var key in obj console log key has a value obj key 它将查看所 有值obj 如果我有一个更大的对象
  • 在 xcode 中看到 0 个针对本机开发语言的本地化文件

    我正在开发一个项目 需要在 xcode 中添加另一种语言的本地化文件 但是当我尝试添加新语言时 它不会向我显示基本故事板的列表 就像下面给出的 我也看到了0 files localized对于英语 开发语言 有人对此有任何想法吗 您应该本地
  • C++ 中最好的统计库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找高性能代码 需要实时运行 最好是开源的 但如果没有什么是免费的和高性能的 我会选择一些支持良好且高质量的东西 但要付出一定的代价
  • 为什么 ember-cli 使用extend而不是create?

    在新的 ember 应用程序中 您首先编写 var App Ember Application create test foo 在新的 ember cli 应用程序中 您首先编写 var App Ember Application exte
  • 如何在flutter中高效访问firestore引用字段的数据?

    使用类似的代码flutter 的 firestore 示例 https github com flutter plugins blob master packages cloud firestore example lib main dar
  • MySQL 有没有办法只选择字段的整数?

    我想搜索数字 但其中一些没有 数字之间的字符或空格 有没有办法像 select numbersonly phone from table 将此包含在您的 WHERE 子句中 WHERE CONVERT your column SIGNED
  • 从 Tensorflow DeepLab v3 演示中提取图像分割图

    我已经在本地系统上设置了 Google 的 DeepLab V3 演示 并在进行一些小的更改后成功运行 就如 coding utf 8 DeepLab Demo This demo will demostrate the steps to
  • 禁用 USB 充电

    由于某些与电池寿命无关的原因 当 USB 主机连接到我的手机 已 root 的 Nexus 4 时 我需要禁用电池充电 上网查了一下 link2 https android stackexchange com questions 15001
  • 在 Java 中实施分层架构

    给定一个用 Java 编写的软件系统 由三层组成 A gt B gt C 即 A 层使用 B 层 B 使用 C 层 我想确保一层的类只能访问同一层的类或其直接依赖项 即B应该能够访问C但不能访问A A也应该能够访问B但不能访问C 有没有一种
  • cqlsh 控制台中出现 NoHostAvailable 错误

    后来我能够摆脱这个错误 但我不确定我所做的是否正确 1 CREATE KEYSPACE myKeySpace WITH replication class NetworkTopologyStrategy dc1 1 dc2 2 AND du
  • Ubuntu 18.04 和 msodbcsql17:无法打开 lib - 我应该提交错误报告吗?

    各位 我已经安装了 msodbcsql 软件包至少几十次了 从来没有出现过这个问题 昨天甚至花了一整天的时间试图解决这个问题 第 1 步 将 apt 密钥和存储库添加到 sourced list d 步骤 2 apt get 安装 msod
  • 使用 celery 更新 Django 模型字段时避免递归 save()

    我正在重写模型的 save 方法以使用 Celery 调用异步任务 该任务还保存了模型 因此我最终遇到了重复调用 Celery 任务的递归情况 这是代码 模型的保存方法 def save self args kwargs super Rou