zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Java在Web开发语言上败给了PHP(转)
    很开心收到了Andreas Loew发给我的注册key
    Cocos2d-x开发移植到安卓平台横竖屏设置及相关
    学习实战二:利用Cocos2d-x写的第一个游戏
    Cocos2d-x项目移植到安卓平台易出现的错误
    cocos2d-x帧动画实现(写下备忘)
    cocos2d-x学习遇到的问题
    C++指针的管理
    Win7开自带的虚拟WIFI
    【SICP练习】21 练习1.27
  • 原文地址:https://www.cnblogs.com/dc2019/p/13504482.html
Copyright © 2011-2022 走看看