使用celery异步处理消息

安装celery

pip install celery

在vote的__init__.py文件中(写在这里可以自动执行)

import celery
import os


# 注册环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'vote.settings')

app = celery.Celery(
    # 指定模块名字(包的名字)
    main='vote',
    # 消息队列
    broker='redis://:redismima@fuwuqiIP:duankou/15',
)

在需要异步执行的函数上打上装饰器

from vote import app


@app.task
def send_mobile_code(tel, code):
    """发送短信验证码"""
    resp = requests.post(
        url='http://sms-api.luosimao.com/v1/send.json',
        auth=('api', 'key-a191efa9e007373daf2c838a88544405'),
        data={
            'mobile': tel,
            'message': f'您的短信验证码是{code},打死也不能告诉别人哟。【Python小课】'
        },
        verify=False
    )
    return resp.json()

调用函数

 # 异步消息生产者:将发短信的任务交给消息队列
 # send_mobile_code.delay(tel, code)
 send_mobile_code.apply_async((tel, code), countdown=10, queue='Q1')        

启用消息的消费者

celery -A vote worker -Q Q1 -l debug

将消息执行结果放入数据库中

安装三方库

pip install django-celery-results

在settings中添加

INSTALLED_APPS = [
'django_celery_results',
]

检查三方库是否有冲突

pip check

将消息结果保存到数据库中
在最后加上消息执行结果的存放位置

import celery
import os


# 注册环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'vote.settings')

app = celery.Celery(
    # 指定模块名字(包的名字)
    main='vote',
    # 消息队列
    broker='redis://:redismima@fuwuqiIP:duankou/15',
    # 保存消息执行结果
    backend='django-db'
)

迁移到数据库

python manage.py migrate django_celery_results

启用消息的消费者

celery -A vote worker -Q Q1 -l debug

可以在数据库中看到消息队列的执行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值