您能否就如何在芹菜任务上分配自定义名称提出建议?默认情况下,它获取模块名称,但我想知道如果我想将任务发送到特定队列,我怎么能实现?
换一种说法,
鉴于相关的Celery配置如下:
CELERY_QUEUES = (
Queue('celery.A', Exchange("xxx"), routing_key='celery.A'),
Queue('celery.B', Exchange("xxx"), routing_key='celery.B'),
)
CELERY_ROUTES = {
'A': {'queue': 'celery.A', 'routing_key': 'celery.A'},
'B': {'queue': 'celery.B', 'routing_key': 'celery.B'},
}
并且有一个功能:
@app.task(ignore_result=True)
def xxx(netelement):
pass
我想要实现的是:如果netelement == A
做task.name=A
(然后,根据映射,将其路由到队列A)
那可能吗 ?
您无法更改函数体中的路由,因为根据定义,任务已在执行且已经路由。
我能想到的一个明显的解决方案是让你的第一个任务委托给另一个(异步,以便它可以适当地路由)。
@app.task(ignore_result=True)
def xxx(netelement):
if netelement == A:
task_A.delay()
else:
task_B.delay()