我有两个工人:
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 启动这些芹菜工人,我根据文档使用鲜花:
curl -X POST -d '{"args":[1,2]}' 'http://localhost:5555/api/task/async-apply/o_broker.add'
但是,使用此 POST 请求,它会在任一工作线程上运行任务。我需要选择运行特定的代理来完成任务。
如何指定或设置此项,以便选择要用于add
任务的工作人员?如果你有一个使用另一个没有花的 API 的解决方案,那也将起作用。
实现此目的的最简单方法是使用单独的队列。 使用 -Q first_worker,celery
启动工作线程,用 -Q second_worker,celery
启动第二个代理。 celery
是 celery
中的默认队列名称。
现在,当您只想将任务发送给第一个工作人员时,您可以使用 celery 的task_routes
设置将任务路由到first_worker
队列。 您可以对称地处理second_worker
队列的路由任务。 您还可以在使用 apply_async
时手动将特定任务调用路由到某个队列,例如:
add.apply_async(args=(1, 2), queue='first_worker')
注意,最后我检查了一下,花只会监控你的一个队列(默认情况下是芹菜队列)。