十一、Celery的使用详解
11.1celery介绍:
celery是一个功能完备即插即用的任务队列。它使得我们不需要考虑复杂的问题,使用非常简单。
celery适用异步处理问题,当发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,
这样用户不需要等待很久,提高用户体验。
celery的特点是:
* 简单,易于使用和维护,有丰富的文档。
* 高效,单个celery进程每分钟可以处理数百万个任务。
* 灵活,celery中几乎每个部分都可以自定义扩展。
11.2celery的结构如下图所示:
11.3在项目中使用celery:
11.3.1需要注意的是celery可以在任意一个独立的目录建立worker,所以celery可以实现三端甚至四端开发:
客户端(client),任务队列端(broker),任务处理端(worker),存放结果端(backend)
11.3.2首先在项目目录下新建一个tasks包来存放celery任务代码,如下所示:
11.3.3config.py是celery的配置项,在我们的项目中主要配置broker和backend的地址(使用redis)
BROKER_URL = "redis://127.0.0.1:6379/1"
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'
11.3.3main.py的作用是创建celery对象:
from celery import Celery
from ihome.tasks import config
# 定义celery对象
celery_app = Celery("ihome")
# 引入配置信息
celery_app.config_from_object(config)
# 自动搜寻异步任务
celery_app.autodiscover_tasks(["ihome.tasks.sms"])
11.3.4 sms包是具体的任务代码,包名一般以任务命名,在我们的项目中的任务主要是发送短信验证码:
from ihome.tasks.main import celery_app
from ihome.libs.yuntongxun.sms import CCP
@celery_app.task
def send_sms(to, datas, temp_id):
"""发送短信的异步任务"""
ccp = CCP()
try:
result = ccp.send_template_sms(to, datas, temp_id)
except Exception as e:
result = -2
return result
11.3.5如何在项目中去使用celery呢?
from ihome.tasks.sms.tasks import send_sms
result_obj = send_sms.delay(mobile, [sms_code, int(constants.SMS_CODE_REDIS_EXPIRES/60)], 1)
11.3.6如何启动celery呢?
如果是在一台电脑上启动celery,则需要开两个命令行,一个正常启动项目:python manage.py runserver
另一个要进入celery的tasks包所在目录,输入命令:celery -A ihome.tasks.main worker -l info
十二、房屋管理
12.1首先在houses.py中编写获取用户发布的房源信息的后端:
12.2接着编写主页幻灯片展示的房源信息,使用缓存提高效率:
12.3接着编写获取房源详情的后端:
12.4接着完善上述功能的前端逻辑:
12.4.1首先获取房东发布的房源信息条目页面是myhouse.html:
这里使用art-template模板:
12.4.2然后在myhouse.js中完善js逻辑:
12.4.3然后是首页轮播图片的前端逻辑,在index.html和index.js中完成:
首先需要在index.html中导入轮播组件:
然后编写js模板:
然后在index.js中完成js逻辑:
12.4.4然后在detail.html和detail.js中编写房屋详情页面的前端逻辑:
首先在detail.html中定义前端模板显示数据,逻辑跟上面的一样,
由于要显示的数据太多,这里不再赘述