我正在尝试让芹菜根据任务名称来路由任务...基本上,我有名为“ worker.some_name”和“ web.some_name”的任务,并且我使用了两个不同的队列,分别称为worker和网络分别。我希望所有工作人员任务都进入工作人员队列,反之亦然。目前,我有一个很大的CELERY_ROUTES字典,像这样:
CELERY_ROUTES = {
"web.some_name": {
"queue": "web"
},
"web.some_other_name": {
"queue": "web"
},
etc.... }
Run Code Online (Sandbox Code Playgroud)
但是我想要一些更通用的东西:
CELERY_ROUTES = (MyRouter(), )
class MyRouter(object):
def route_for_task(self, task, args=None, kwargs=None):
if task.split('.')[0] == "worker":
return {"queue": "worker"}
return {"queue": "web"}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。有任何想法吗?谢谢。
您应该能够通过将交换类型从直接更改为主题来完成您想要的操作。这样您就可以将任务指定为 web.* 或worker.*
您可以在这里阅读:http ://ask.github.com/celery/userguide/routing.html#topic-exchanges