Django项目总结:Celery
Celery
-- Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统
-- 专注于实时处理的异步任务队列
-- 同时也支持任务调度
-- https://www.jianshu.com/p/620052aadbff
-- 官网:https://docs.celeryproject.org/
-- 消息队列
-- 异步任务
-- 定时任务
-- 需要了解的知识
-- 选择并安装消息容器(载体)=> RabbitMQ,Redis
-- 安装Celery并创建第一个任务
-- 开启工作进程并调用任务
-- 记录工作状态和返回的结果
# 安装 celery[redis] pip install -U "celery[redis]" # 安装 celery pip install celery # 配置redis位置,配置缓存时已在 settings 配置 CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', }, 'TIMEOUT': 60 * 60 * 24, } } # 创建应用和任务 doc/code/tasks.py # 开启 celery worker 服务 cd doc/code/ celery -A tasks worker --loglevel=info # 调用异步任务
在 Django 中使用 celery
-- https://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
-- 官方示例源码:https://github.com/celery/celery
-- 下载源码,用 pycharm 打开 example 中 Django 项目
# 将环境改为自己的环境 # 安装 sqlalchemy pip install sqlalchemy -i https://pypi.douban.com/simple # settings.py 修改成 redis 的地址 CELERY_BROKER_URL = 'redis://localhost:6379/1' # 根/urls.py urlpatterns = [ url(r'^index/', views.index) ] # views.py def index(request): return HttpResponse('Hi') # 执行迁移 python manage.py migrate python manage.py runserver # 开启 celery celery -A 项目名 worker --loglevel=info # celery 启动后出现黄字警告,关闭Debug
-- 将示例配置和信息导入到自己的项目中
-- https://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
-- 导入测试
根 / celery.py
import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'RESTEnd.settings') app = Celery('RESTEnd') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks() @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request))
sendemail / tasks.py
from time import sleep from celery import shared_task @shared_task def add(a, b): print("计算中...") sleep(5) return a + b
sendemail / urls.py
from django.urls import path from sendemail import views urlpatterns = [ path('index/', views.index), path('asy/', views.asy), ]
sendemail / views.py
from django.http import HttpResponse from sendemail.tasks import add def index(request): result = add(5, 6) return HttpResponse(result) def asy(request): result = add.delay(50, 60) return HttpResponse(result)
异步邮件发送
sendemail / tasks.py
# 邮件发送 @shared_task def send_email(receive): subject = '这是一封邮件' message = 'Yes' from_email = '邮件地址' recipient_list = (receive,) send_mail(subject, message, from_email, recipient_list)
sendemail / views.py
def email(request): mail_address = request.GET.get('address') send_result = send_email.delay(mail_address) return HttpResponse(send_result)
从现在开始,种下梦想中的参天大树