Celery即时定义工作流程

时间:2018-07-05 10:26:09

标签: python-3.x celery workflow

我正在使用 python 3.6.6 Celery 4.2.0。

我正在尝试管理可能会随时更改的动态任务工作流。工作流程可能包含较长和较短的步骤。

例如: 最初,我具有以下任务工作流程:

Initial workflow

但是,有时我必须添加另一个依赖于A的任务。因此任务可能要等到A完成:

Desired workflow

   from __future__ import absolute_import
   from celery import subtask, signals
   from pymemcache.client import base
   from test_celery.celery import app
   import time

   def get_task_uuid(task):
      return str(hash(frozenset(task[0], task[1]))))

   @app.task
   def add(x, y):
       print('add({},{}) = {} | {}'.format(x, y, x+y, time.time()))

       return x+y

    @app.task
    def sub(x, y):
       print('sub({},{}) = {} | {}'.format(x, y, x-y, time.time()))
       return x-y

    @app.task
    def mul(x, y):
       time.sleep(10)
       print('mul({},{}) = {} | {}'.format(x,y,x*y, time.time()))
       return x*y

     @signals.before_task_publish.connect
     def before_task_publish(body, exchange, routing_key, headers, properties,  retry_policy, **kw):
         task = (body, headers['task'])
         uuid = get_task_uuid(task)

我一直在寻找任何可能的方法,试图在任务A成功之后立即监听任务信号以使D运行(signals.task_success)。有想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用chainslink的第一个任务的结果根据结果调用您想要的任何任务