django+celery实现异步消息队列

步骤:
1. 创建项目
django-admin startproject project


2. 创建app
python manage.py startapp sendemail


3. 配置settings.py
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1']

# celery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/1'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'
CELERY_TASK_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
TIME_ZONE = 'Asia/Shanghai'
CELERY_TIMEZONE = TIME_ZONE

# email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = ""
EMAIL_HOST_PASSWORD = ''
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER = ""
EMAIL_PORT = 25
EMAIL_USE_TLS = True

4. tasks.py代码
#coding=utf-8
from __future__ import absolute_import, unicode_literals
from celery import shared_task
from django.core.mail import send_mail
import logging

logger = logging.getLogger(__name__)


@shared_task
def celery_send_email(subject, message, from_email, recipient_list, **kwrags):
    try:
        logger.info("\n开始发送邮件")
        send_mail(subject, message, from_email, recipient_list, **kwrags)
        logger.info("邮件发送成功")
        return 'success!'
    except Exception as e:
        logger.error("邮件发送失败: {}".format(e))




5.初始化数据库
python manage.py makemigrations
python manage.py migrate


6. 配置我们的celery-beat
django提供了一个可视化的后台,
启动服务 python manage.py runserver
浏览器访问 :120.0.0.1:8000/admin
这时候我们发现我们还没有管理员帐号?
命令窗口通过python manage.py createsuperuser 创建管理员帐号


7. 后台 periodic task 中增加定时任务
这里配置定时任务可以做到最小单位 microsecond 微妙
Interval 间隔
Crontab 最小单位是Minute分钟
分 时 日 月 星期


8. 启动心跳
python manage.py celery beat


9. 启动 worker
python manage.py celery worker -l info 


10. 启动 celery flower ,对任务进行监控
pip install celery-flower
python manage.py celery flower
127.0.0.1:5555

每次运行异步task后, Celery都会返回AsyncResult对象作为结果. 你可以将其保存, 然后在将来查看该task是否运行成功和返回结果:



猜你喜欢

转载自blog.csdn.net/wanglin317/article/details/80339196