Django异步编程
在之前的开发过程当中,django都是使用单线程结构,比如,请求一个视图,视图向数据库写入30000条数据,那么整个页面进入等待状态,类似的需求是有的,但是用户体验不可以是这样:比如,发短信,django调用爬虫,大规模数据写入。
异步编程的底层可以用多线程实现,但是在开发当前有一个很成熟的异步编程框架加载 celery(芹菜),现在要学习的是django封装好的celery框架,django-celery。
Celery框架认识
Celery 是一个简单的,灵活的,可靠的python编写处理大量消息的分布式系统。
分布式:就是将任务分发个多个客户端进行处理的模式。通常在python当中使用的分布式有两种:
1、redis分布式,利用redis广告模式进行分布式
2、使用celery进行分布式
分布式开发,一定涉及一个设计模式:生产消费者模式
Celery基本原理
使用celery需要的组件
1、pip install celery
2、需要消息队列①rabbitmq 消息队列②Redis③其他数据库
在整个celery开发的过程当中知道要有存放任务的容器,这个容器可以是redis数据库,可以是其他数据库,还可以是rabbitmq消息队列。如果任务有结果还需要设置一个容器来存放结构。
使用django-celery+redis进行异步任务处理
1,下载安装包
Pip install django-celery=3.2.2
Pip install django-redis=4.10.0
pip install redis==2.10.6
Pip install flower #可视化平台
2,配置settings
3,给celery创建独立的App
4,celery配置,在项目的主目录下创建celery.py文件,并进行配置
# celery配置
from __future__ import absolute_import,unicode_literals
import os
from celery import Celery
from django.conf import settings
#设置celery执行的环境变量,执行django项目的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE','CeleryTask.settings')
# 创建celery应用
app = Celery('art_project') #celery应用的名称
app.config_from_object('django.conf:settings')#加载的配置文件
#如果在工程的应用中创建了task.py模块,那么Celery应用就会自动去检测创建的任务,
# 比如你添加一个任务,在django中会实时的检测出来。
app.autodiscover_tasks(lambda :settings.INSTALLED_APPS)
5,在celery独立的app下编写任务文件,文件名必须是task.py
6,因为我们安装了djcelery app,所以,我们需要同步数据库
#同步数据库
python manage.py check
python manage.py makemigrations
python manage.py migrate
7,celery的任务需要使用delay函数触发,所以编辑一个视图,并且配置路由
视图
路由
8,启动celery之前需要启动Redis数据库
9,Redis数据库启动之后,启动celery
python manage.py celery worker --loglevel=info