gpt4 book ai didi

celery - Django Celery 工作流链暂停/恢复

转载 作者:行者123 更新时间:2023-12-04 15:45:54 24 4
gpt4 key购买 nike

有什么方法可以暂停/恢复使用 celery 3.0 中的链创建的正在运行的工作流程?

基本上,我们的系统中有两种不同类型的任务:交互式任务和非交互式任务。我们拥有所有参数的非交互式的,但交互式的需要用户输入。请注意,对于交互任务,我们只能在链中所有先前的任务都完成后才请求用户输入,因为它们的结果会影响交互任务(即我们不能在创建实际链之前请求用户输入)。

关于如何解决这个问题的任何建议?在这里真的很茫然。。

目前的想法:

  • 创建Task的两个子类(来自celery import Task)。向 Interactive 任​​务子类添加一个额外的实例(类成员)变量,默认设置为 false,表示仍需要一些用户输入。不知何故可以访问任务的实例,并从 celery worker 外部将其设置为真(虽然我已经查了很多,似乎不可能直接从另一个模块访问任务对象)
  • 将链划分为由交互式作业分隔的多个链。一旦链到达末端并触发交互式任务的交互式客户端组件,celery worker 外部的某种机制就会检测到。一旦用户输入了所有这些数据,获取数据并启动新链,其中交互式任务位于新链的头部。
  • 最佳答案

    我们已经在我们的项目中实现了类似于您的第二个想法的东西,并且效果很好。这是实现的要点。

    添加新字段 status到您的模型并覆盖保存方法。

    模型.py:

    class My_Model(models.Model):
    # some fields
    status = models.IntegerField(default=0)

    def save(self, *args, **kwargs):
    super(My_Model, self).save(*args, **kwargs)
    from .functions import custom_func
    custom_func(self.status)

    任务.py
    @celery.task()
    def non_interactive_task():
    #do something.

    @celery.task()
    def interactive_task():
    #do something.

    函数.py
    def custom_func(status):
    #Change status after non interactive task is completed.
    #Based on status, start interactive task.

    status模板的变量,这对于显示 UI 元素以供用户输入信息很有用。当用户输入所需信息时,更改状态。这调用 custom_func这会触发您的 interactive_task .

    关于celery - Django Celery 工作流链暂停/恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14887222/

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