事实上,我有很少的django应用程序与芹菜任务。我需要在特定通道中执行每个任务,以便我可以控制负载。例如,我可能有3台服务器收听channel_for_app_1
,2台收听channel_for_app_2
。我的问题是如何运行celery守护进程并指定通道?还有其他方法吗?
答案 0 :(得分:1)
在django设置中,您可以指定CELERY_QUEUES:
CELERY_QUEUES = {
"worker": {
"exchange": "worker",
"binding_key": "worker"
},
像这样。每个密钥都是一个队列名称,如果你想获得花哨(多次交换等),你可以更改交换和绑定密钥,但我从来不需要。
定义任务时,您可以
@task(queue="worker", etc)
最后一步是在运行celery时指定队列名称 - 通过celery守护程序配置,或在运行它时在命令行上运行。所有这一切的结果是芹菜任务将转到任务定义指定的队列,并且仅在运行指定队列的框上。
所以当你说“频道”时,我不确定你的意思是否明显不同,但我总是使用多个每个任务的队列来完成你所描述的内容。
答案 1 :(得分:1)
请查看此页:http://docs.celeryproject.org/en/latest/userguide/routing.html。
您的芹菜应该以-Q,--queue设置开始,这些设置定义将用于获取任务的队列