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实例

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

这里设置环境变量可以有另外一种非硬编码的方式

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

修改__init__.py文件

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

修改settings.py文件

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

创建任务

我这里新建了一个app叫做mytasks,其实你在任意现有的app下面建立tasks.py文件都可以。在settings.py文件中的INSTALLED_APPS中把我新建的mytasks安装进来。

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

调度任务

在mysite这个APP中调用任务

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

启动worker和Django

进入到项目目录也就是和manage.py的同级目录,命令中写的DjangoDemo是项目名称。为什么写这个名字?其实和之前启动worker是一样的,因为在DjangoDemo中有一个叫做celery.py的文件,如果不叫这个文件就需要DjangoDemo.文件来指定Celery的APP入口文件。

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

启动Django进行调用

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

使用Django数据库保存执行结果

修改settings.py文件

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

再次去调用之前的URL你就会发现数据库有结果,这意味着你以后可以通过task_id从数据库中查询结果。

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

配置定时任务

在配置文件中写定时任务

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

启动worker

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

启动beat服务

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

在worker上查看结果

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

其实这里可以看出我这里根本没有启动Django或者说这里跟Django没有什么关系。因为Celery本身也不依赖Django.

通过Web形式配置定时任务

这种形式就需要用到Django了

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

这里用到了一个新的APP也就是之前需要安装的django_celery_beat

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

做数据迁移操作

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

启动Django并打开admin后台

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Crontabs就是做计划任务的
Intervals是简单的定时任务,比如每个几秒或者几分钟这种周期性任务
Periodic tasks要执行的任务在这里配置

添加任务

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

配置好之后启动worker

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

启动beat服务,这里需要增加一个参数函数是使用数据库中的任务调度配置

celery -A DjangoDemo beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

在worker中查看结果

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

需要注意的是每次修改数据库的定时任务执行配置你都需要重启beat服务,否则它无法感知这个变化。

监控

这里就用到Flower了,这个flower可以安装到其他机器,我这里就安装到其他服务器上然后运行centos 7默认的也是Python2.7 我自己安装了Python3.7 所以我进入到编译安装后的目录里/usr/local/python3/bin中,然后pip3 install flower安装完毕后运行。

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

然后我在笔记本上启动一个worker

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

打开flower的界面

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

通过命令调用一次任务

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合

Celery异步调度框架(二)与Django结合使用
配置Celery与Django结合