如何跨多个服务器平衡芹菜任务?

时间:2015-09-28 20:18:58

标签: python rabbitmq celery

我在多个服务器上运行芹菜,每个服务器的并发性为2或更多,我想平衡芹菜任务,以便CPU使用率最低的服务器可以处理我的芹菜任务。

例如,假设我有2个服务器(A和B),每个服务器的并发性为2,如果队列中有2个任务,我希望A处理一个任务而B处理另一个任务。但目前可能的是,A上的第一个进程将执行一个任务,而A上的第二个进程将执行第二个任务,而B处于空闲状态。

有没有一种简单的方法,通过celery扩展或配置,我可以将任务路由到CPU使用率最低的服务器?

2 个答案:

答案 0 :(得分:1)

最佳选择是使用生产服务器中的celery.send_task,然后将工作线程部署到n实例上。然后可以使用celery -A proj worker -l info -Ofair按照@ealeon的方式运行这些工作程序。
这样,负载将分布在所有服务器上,而无需在使用服务器上存在代码库。

答案 1 :(得分:0)

尝试:

" http://docs.celeryproject.org/en/latest/userguide/optimizing.html#guide-optimizing
您可以通过启用-Ofair worker选项来禁用此预取行为:

$ celery -A proj worker -l info -Ofair"