Django中Celery定时任务的实现
配置Djcelery
主要步骤
- 在settings配置相关参数
- 定义任务
- 执行任务,可以在程序中调用执行,也可交给后台周期性执行
1) Django项目的settings模块配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
CELERY_IMPORTS这个引用自己定义的任务,本文是设置在app名为monitor_agent的my_celery下的tasks.py
官方配置项介绍 http://docs.celeryproject.org/en/latest/userguide/configuration.html
2)编写tasks.py文件中的函数,如下例
1 2 3 4 5 6 7 |
|
3)同步数据库
python manage.py makemigrations
python manage.py migrate
在数据库中生成几张表
可以通过django的admin页面进行数据创建
启动 /usr/bin/python manage.py celerycam --loglevel=INFO
admin后台查看 woker是不是在线
当worker可以监控后,在admin后台tasks表中可以查看每次任务的执行状态
或者自己导入from djcelery import models as celery_models,通过它提供的Model Query API来操作,同平常的数据库查询一样。
4)启动
官网 http://docs.celeryproject.org/en/latest/userguide/workers.html
启动 python manage.py celery worker -l info
如果有定时任务的话,还需要启动心跳 python manage.py celery beat
celery worker --help 启动参数帮助命令
celery beat --help 启动参数帮助命令
Django中Celery的定时任务集群部署
1)以两台主机为例,通过django创建2个app,名称为net_celery,local_celery,它们的task不同
2)net_celery部署在一台主机,settings配置
worker程序启动指定hostname和queue
1 |
|
admin页面配置,需要将queue、exchange指定
3)local_celery部署在一台主机,settings配置
worker程序启动指定hostname和queue,注意与上面一台不一样
1 |
|
admin页面配置,需要将queue、exchange指定
4)启动celery beat和celerycam
备注:两个进程只需要在一台主机上启动,不要启动多,如果启动多个,会出现同一个task多次执行。
1 |
|
1 |
|