我正在使用 python 3.6.6 和 Celery 4.2.0。
我正在尝试管理可能会随时更改的动态任务工作流。工作流程可能包含较长和较短的步骤。
例如: 最初,我具有以下任务工作流程:
但是,有时我必须添加另一个依赖于A的任务。因此任务可能要等到A完成:
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)。有想法吗?