在
上一篇介绍了celery之后,我们根据它的整个工作流程来实现代码。
Celery目录
celery作为一个应用,我们有下面的目录结构:
main.py
存放启动一个celery任务的主要流程,包括:
- 创建Celery的主程序对象
- 将jango和celery结合,需要先启动django
- 加载celery配置
- 注册celery任务
- 最后通过终端命令运行
from celery import Celery
app = Celery("luffy")
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffyapi.settings.dev')
import django
django.setup()
app.config_from_object("mycelery.config")
app.autodiscover_tasks(["mycelery.sms"])
config.py
如注释,主要是设置任务队列的url地址、结果队列地址,我们这里用redis来存放:
broker_url = "redis://127.0.0.1:6379/14"
result_backend = "redis://127.0.0.1:6379/15"
tasks.py
必须这么命名。通过装饰器来申明这是一个要运行的task,并给这个task起个名字。这里封装好要异步处理的代码:
from mycelery.main import app
from luffyapi.libs.yuntongxun.sms import CCP
from luffyapi.settings import constants
import logging
log = logging.getLogger("django")
@app.task(name="send_sms")
def send_sms(mobile, sms_code):
"""发送短信"""
ccp = CCP()
ret = ccp.send_template_sms(mobile, [sms_code, constants.SMS_EXPIRE_TIME//60], constants.SMS_TEMPLATE_ID)
if not ret:
log.error("用户注册短信发送失败!手机号:%s" % mobile)
views.py
将views.py中实现的逻辑代码换成下面酱紫,便可以异步执行了。
from mycelery.sms.tasks import send_sms
send_sms.delay(mobile, sms_code)
启动celery
在终端执行:
celery -A mycelery.main worker --loglevel=info
这就实现了发送验证码的异步请求。
|