我在Celery的tasks.py
中有几项任务。
# this should go to the 'math' queue
@app.task
def add(x,y):
uuid = uuid.uuid4()
result = x + y
return {'id': uuid, 'result': result}
# this should go to the 'info' queue
@app.task
def notification(calculation):
print repr(calculation)
我想要做的是将每个任务放在一个单独的Celery队列中,然后在每个队列上分配一些工作人员。
问题是我不知道在我的代码中将任务从一个队列放到另一个队列的方法。
因此,例如当add
任务完成执行时,我需要一种方法将生成的python字典放到info
队列中以进行进一步处理。我该怎么办?
提前致谢。
编辑 - 澄清 -
正如我在评论中所说,问题主要在于工人如何将从queue A
检索到的数据发送到queue B
。
答案 0 :(得分:1)
你可以这样试试。
无论您在何处调用任务,都可以将任务分配到哪个队列。
add.apply_async(queue="queuename1")
notification.apply_async(queue="queuename2")
通过这种方式,您可以将任务放在单独的队列中。
单独队列的工作人员
celery -A proj -Q queuename1 -l info
celery -A proj -Q queuename2 -l info
但是你必须知道default
队列是celery
。所以如果没有指定queue name
的任何任务将转到celery
queue.So celery
的消费者如果有的话就需要。
celery -A proj -Q queuename1,celery -l info
您的预期答案
如果你想将一个任务的结果传递给另一个任务。那么
result = add.apply_async(queue="queuename1")
result = result.get() #This contain the return value of task
然后
notification.apply_async(args=[result], queue="queuename2")