想要弄一个worker对应一个queue,但是每个worker只注册一个任务,调用这个任务直接扔到对应的queue里,怎么写配置啊。。。弄了一天了。。
想要弄一个worker对应一个queue,但是每个worker只注册一个任务,调用这个任务直接扔到对应的queue里,怎么写配置啊。。。弄了一天了。。
4 回答4.5k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
最新的文档看这里,http://docs.celeryproject.org...
这是我自己写的文档,我当时测试的时候用到了djcelery的配置界面,代码里可以这么指定队列和路由键
任务路由
本节只讨论自动路由,更详细内容可以参考文档 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下指定队列名称(名称区分大小写),完成之后保存。