我想知道为什么芹菜链与临时解决方案相比如此缓慢。
在临时解决方案中,我手动转发任务,缺点是我无法等待链的末尾。
在下面的代码中,canvas 解决方案需要 16 秒,而 ad hoc 需要 3 秒。想知道与简单的解决方案相比,其他画布内容是否也很慢。
import sys
from celery import Celery, chain
from celery.task import task
from datetime import datetime
broker = "amqp://admin:admin@172.16.1.30:5672/tasks"
backend = 'redis://:redis@172.16.1.30:6379/1'
app = Celery(
"celery-bench",
broker=broker,
backend=backend
)
app.conf.accept_content = ['json']
app.conf.task_serializer = 'json'
app.conf.result_serializer = 'json'
@task(name="result", queue="bench-results")
def result(result):
return result
@task(name="simple-task-auto-chain", queue="bench-tasks")
def simple_task_auto_chain(date, arg):
if arg >= 0:
simple_task_auto_chain.delay(date, arg-1)
return arg
else:
return result.delay(
"AutoChain %s"%(str(datetime.now() - datetime.fromisoformat(date)))
)
@task(name="simple-task", queue="bench-tasks")
def simple_task(args):
date, …Run Code Online (Sandbox Code Playgroud) 我们正在用Celery实施工作流程。首先,我们需要并行运行一些任务,当它们全部完成后,我们需要运行一个任务。
看来我们可以使用和弦或群组和链:
chord(tasks, task)
Run Code Online (Sandbox Code Playgroud)
与
group(tasks) | task
Run Code Online (Sandbox Code Playgroud)
两者之间的确切区别是什么?他们似乎做同样的事情。