gpt4 book ai didi

django - 如何使用 Django admin 使用 Celery 创建自定义任务

转载 作者:行者123 更新时间:2023-12-04 15:03:49 25 4
gpt4 key购买 nike

我有一个为一家房地产公司创建的 Django 后端。我已经构建了很多硬编码的任务,我想通过管理页面使这些任务可定制......但我不太清楚如何做到这一点。
例如,假设我想创建一个任务来发送可以从管理页面自定义的电子邮件。理想情况下,我有一个触发器列表可供选择,例如提交联系表单。
看起来像这样的东西:
enter image description here

最佳答案

我在很多场合都有同样的需求,并解决了以下问题:

  • 我有一个抽象的“基本”任务模型,其中包含一些与任何“通用”后台任务通用的字段:created_on、started_on、completed_on、status、progress、failure_reason 以及更多
  • 当需要新的特定任务时,我写道:
  • 由调度程序运行的作业功能(在您的情况下为 Celery)
  • 从任务
  • 派生的具体模型

  • 派生模型知道必须运行哪个作业;这是在模型定义中硬编码的; 我还添加了特定字段以收集作业所需的任何自定义参数
  • 现在,您可以通过编程方式或从 Django 管理员创建新任务,根据需要提供实际参数;在后一种情况下,Django 像往常一样提供所需的表单和验证

  • 在数据库中保存新记录后,模型开始工作,传递任务(模型)id; 您可以从作业中检索任务的详细信息 : 这是原问题的答案。
    您还可以更新模型中的进度/状态以供以后检查,并使用基类提供的其他服务(例如,日志记录)。
    此模式已被证明非常有用,因为作为一个额外的好处,您可以从 Django 管理员监控异步任务。
    在多个项目中使用它后,我将此逻辑封装在一个可重用的 Django 应用程序中:
    https://github.com/morlandi/django-task
    当前的实现基于 rq , 如 Celery是针对我的需求过度设计的。我想它可以适应 Celery有一些修改:
  • 删除 Task.check_worker_active_for_queue()
  • 删除 Task.get_queue()
  • 重构 Task.run()

  • 此外,辅助 Job 类必须重构如下:
  • 将 rq.get_current_job() 替换为 Celery 的等效项

  • 可惜最近没用过Celery,无法给出更详细的建议。

    关于django - 如何使用 Django admin 使用 Celery 创建自定义任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66505983/

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