一、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
进入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的结果存储后端:
这样就可以了,我们执行一下任务,看一下结果是否存储到数据库表中: