我有两个工人:
celery worker -l info --concurrency=2 -A o_broker -n main_worker
celery worker -l info --concurrency=2 -A o_broker -n second_worker
我正在用flower监视和接收这些工人的API请求:
flower -A o_broker
要通过API启动这些芹菜工作者,我会按照docs使用鲜花:
curl -X POST -d '{"args":[1,2]}' 'http://localhost:5555/api/task/async-apply/o_broker.add'
但是,通过此POST请求,它在任一工作线程上运行任务。我需要选择运行特定的代理来完成任务。
如何指定或设置它,以便选择要用于add
任务的工作程序?如果您有使用不带花的其他API的解决方案,那也可以。
答案 0 :(得分:1)
最简单的方法是使用单独的队列。从-Q first_worker,celery
开始worker,从-Q second_worker,celery
开始第二个代理。 celery
是celery
中的默认队列名称。
现在,当你想要一个任务发送到只是第一个工人,你可以路由任务使用first_worker
队列芹菜的task_routes
setting。您将路由任务对称地处理到second_worker
队列中。您还可以在使用apply_async
时manually route特定任务调用到特定队列,例如:
add.apply_async(args=(1, 2), queue='first_worker')
n.b。,最后我检查了一下,flower只监视您的一个队列(默认情况下是芹菜队列)。