celery 怎么配置多worker分别对应一个queue

想要弄一个worker对应一个queue,但是每个worker只注册一个任务,调用这个任务直接扔到对应的queue里,怎么写配置啊。。。弄了一天了。。

阅读 7.3k
1 个回答

最新的文档看这里,http://docs.celeryproject.org...
这是我自己写的文档,我当时测试的时候用到了djcelery的配置界面,代码里可以这么指定队列和路由键

>>> from feeds.tasks import import_feed
>>> import_feed.apply_async(args=['http://cnn.com/rss'],
...                         queue='feed_tasks',
...                         routing_key='feed.import')

任务路由 
 
本节只讨论自动路由,更详细内容可以参考文档 http://docs.celeryproject.org...。 
 
默认设置情况下Celery自动开启路由功能,当指定的队列不存在时,Celery会自动创建。基于这一特性,在settings.py中可以添加以下配置项,在任务和队列名称之间指定对应关系。 
CELERY_ROUTES = {'app.tasks.minus': {'queue': 'minus'}} 
 
当设置修改完成之后,需要修改工作线程的启动参数,指定工作线程需要处理的队列。例如这里定义了两个工作线程服务 cdworker1和cdworker2。 
 
[root@localhost system]# cat cdworker1.service 
[Unit] 
Description=celerydemoworker daemon 
After=network.target 
 
[Service] 
User=nginx 
Group=nginx 
WorkingDirectory=/opt/apps/celerydemo 
ExecStart=/opt/apps/celerydemo/env/bin/python /opt/apps/celerydemo/manage.py celery worker -A celerydemo -n cdworker1 -l info -f /var/log/celery/cdworker1.log 
 
[Install] 
WantedBy=multi-user.target 
 
[root@localhost system]# cat cdworker2.service 
[Unit] 
Description=celerydemominusworker daemon 
After=network.target 
 
[Service] 
User=nginx 
Group=nginx 
WorkingDirectory=/opt/apps/celerydemo 
ExecStart=/opt/apps/celerydemo/env/bin/python /opt/apps/celerydemo/manage.py celery worker -n cdworker2 -A celerydemo -l info -f /var/log/celery/cdworker2.log -Q minus 
 
[Install] 
WantedBy=multi-user.target 
 
配置文件创建完成后,启动服务。 
 
打开浏览器,访问http://<site_fqdn>/admin/djcelery 
单击Preodic tasks,可以查看已存在的定时任务 
在Preodic tasks列表页面,单击右上角的添加按钮可以创建定时任务 
在Name文本框中键入任务名称 
在Task (registered)下拉框中选择需要定时执行的任务 
在Schedule下选择或创建任务执行间隔。 
在Arguments下指定任务所需参数。 
在Execution Options下指定队列名称(名称区分大小写),完成之后保存。 

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题