Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合
需要安装的插件
# 用于在Django中执行任务 pip install django-celery-beat # 这个是把任务执行结果保存到django-orm中也就是数据库中的插件 pip install django-celery-results # 集成到Django admin中的Celery管理插件 pip install django-celery-admin
创建celery.py文件
在settings.py同级目录下创建celery.py文件,用于创建celery实例
这里设置环境变量可以有另外一种非硬编码的方式
修改__init__.py文件
修改settings.py文件
创建任务
我这里新建了一个app叫做mytasks,其实你在任意现有的app下面建立tasks.py文件都可以。在settings.py文件中的INSTALLED_APPS中把我新建的mytasks安装进来。
调度任务
在mysite这个APP中调用任务
启动worker和Django
进入到项目目录也就是和manage.py的同级目录,命令中写的DjangoDemo是项目名称。为什么写这个名字?其实和之前启动worker是一样的,因为在DjangoDemo中有一个叫做celery.py的文件,如果不叫这个文件就需要DjangoDemo.文件来指定Celery的APP入口文件。
启动Django进行调用
使用Django数据库保存执行结果
修改settings.py文件
再次去调用之前的URL你就会发现数据库有结果,这意味着你以后可以通过task_id从数据库中查询结果。
配置定时任务
在配置文件中写定时任务
启动worker
启动beat服务
在worker上查看结果
其实这里可以看出我这里根本没有启动Django或者说这里跟Django没有什么关系。因为Celery本身也不依赖Django.
通过Web形式配置定时任务
这种形式就需要用到Django了
这里用到了一个新的APP也就是之前需要安装的django_celery_beat
做数据迁移操作
启动Django并打开admin后台
Crontabs就是做计划任务的
Intervals是简单的定时任务,比如每个几秒或者几分钟这种周期性任务
Periodic tasks要执行的任务在这里配置
添加任务
配置好之后启动worker
启动beat服务,这里需要增加一个参数函数是使用数据库中的任务调度配置
celery -A DjangoDemo beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
在worker中查看结果
需要注意的是每次修改数据库的定时任务执行配置你都需要重启beat服务,否则它无法感知这个变化。
监控
这里就用到Flower了,这个flower可以安装到其他机器,我这里就安装到其他服务器上然后运行centos 7默认的也是Python2.7 我自己安装了Python3.7 所以我进入到编译安装后的目录里/usr/local/python3/bin中,然后pip3 install flower安装完毕后运行。
然后我在笔记本上启动一个worker
打开flower的界面
通过命令调用一次任务