Celery 具有比 saltstack 更好的任务语言,但它似乎缺少特定于机器的路由。是否可以将 Celery 任务路由到特定机器?
编辑:假设有数百或数千台机器,它们是动态配置(启动/停止)的。所以没有办法提前知道机器的名字
是的,仅使用默认的自动路由就非常简单。如果您希望将 1 个任务植根到一台特定的机器,只需在任务装饰器中添加一个唯一的队列名称,如下所示:
# tasks.py
@task(queue='my_unique_queue')
def web_site_status(url):
return requests.get(url).status_code
然后使用远程框,只需包含启动 celeryd/workers 时要使用的队列的名称。
$ python manage.py celeryd -l info -Q my_unique_queue
所有远程盒子都可以“使用”一个或多个队列,因此只需使用唯一队列命名单个任务,您就可以将任务分配给所有、组或单个远程盒子。
如果您需要更多控制权,还可以查看@“手动路由”的文档:
http://docs.celeryproject.org/en/latest/userguide/routing.html#manual-routing