Django、Celery、Flower集成:异步任务与监控

一、Celery

1、celery是一个分布式任务队列:

简单:几行代码就可以创建一个简单的Celery任务

高可用:工作机会自动重试

快速:可以执行一分钟上百万的任务

灵活:每一块都可扩展

2、大量需要使用异步任务的场景

发送电子邮件、发送IM消息通知

爬取页面,数据分析

图像、视频处理

生成报告、深度学习

3、搭建celery环境,参考官方文档:https://docs.celeryproject.org/en/master/getting-started/first-steps-with-celery.html#first-steps

安装celery:pip install celery

安装消息传输代理,我使用的是redis,用docker安装很方便,再安装redis的依赖:pip install redis

4、创建第一个celery任务,参考官方文档,首先创建一个文件tasks.py

第一个参数指当前模块,第三个参数是broker关键字参数,指定要使用的消息代理的URL,我这里使用的是redis

进入tasks.py文件所在目录,运行celery,通过使用worker参数执行:

运行成功后,如图:

二、Celery的监控和管理Flower

Flower是一个基于web的celery实时监控和管理工具。它正在积极开发中,但已经是一个必不可少的工具。

它可以实时监控celery事件、远程控制等。

参考官方文档:https://docs.celeryproject.org/en/master/userguide/monitoring.html,安装pip install flower

启动Flower:

通过浏览器访问http://localhost:5555/dashboard,就可以看到可视化界面了

三、Django与Celery集成

参考官方文档:https://docs.celeryproject.org/en/master/django/first-steps-with-django.html

根据官方文档,3.1版本之后的celery不需要单独的库与Django一起使用。

新建celery.py文件在Django的proj/proj/celery.py目录下,文件内容官方提供如图:

在proj/proj/_init__.py模块中导入此应用程序。这可确保在Django启动时加载应用程序,以便@shared_task装饰器使用它:

settings.py中可以增加配置,有哪些配置可以参考:https://docs.celeryproject.org/en/master/userguide/configuration.html#configuration

创建一个任务,我这里的任务是一个钉钉消息通知的任务,编写tasks.py文件:

场景是在用户登录成功后,发送钉钉消息。使用tasks.py中的方法的delay()延迟调用,任务会被扔到celery的队列里面去异步执行。

到这一步就简单的完成了Django与celery的集成,这时我们启动所有的组件:redis启动、celery启动、Flower启动、Django启动,执行一下登录接口,然后检查Flower界面,celery的处理结果可以在Flower上查看:

官方文档还提到:也可以使用django ORM/Cache存储结果。首先安装pip install django-celery-results;

编辑settings.py,将django_celery_results增加到INSTALLED_APPS:

执行数据库迁移创建表: python manage.py migrate django_celery_results;

配置celery的结果存储后端:

这样就可以了,我们执行一下任务,看一下结果是否存储到数据库表中:

你可能感兴趣的:(Django、Celery、Flower集成:异步任务与监控)