安装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
可以在数据库中看到消息队列的执行结果