django+celery+redis框架搭建

作者: 不爱去冒险的少年y | 来源:发表于2019-02-15 09:12 被阅读21次

    第1步:安装celery与redis

    警告:在pip install celery后执行 celery -A 你的项目名 worker --pool=solo -l info 报下图一错误,建议执行 pip install --upgrade https://github.com/celery/celery/tarball/master 执行完后再次执行 celery -A 你的项目名 worker --pool=solo -l info 就会出现图二样式

    图一.png
    图二.png
    Mac OS X 安装
    $ brew install Redis    # Redis 安装,需提前安装 brew
    $ pip install celery    # pip 安装celery库
    $ pip install redis     # pip 安装 redis库
    

    如果您没有安装 brew,建议您先安装 brew 参考 brew安装

    Ubuntu 安装

    安装 redis库

    $ sudo apt install redis    # Redis 安装
    $ pip install celery        # pip 安装celery库
    $ pip install redis         # pip [安装 redis库](https://www.cnblogs.com/zuidongfeng/p/8032505.html)
    
    

    Linux 安装

    请访问 redis 下载 最新的安装包,本文使用的是在书写本文这个时间时最新的安装包,如官方发布更新,恕本文不另行通知更改。

    $ wget http://download.redis.io/releases/redis-4.0.9.tar.gz
    $ tar xzf redis-4.0.9.tar.gz
    $ cd redis-4.0.9
    $ make
    # make完后 redis-4.0.9 目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:
    # 下面启动redis服务.
    $ cd src
    $ ./redis-server
    

    Windows 安装 参考菜鸟教程-Redis 安装

    下载地址:https://github.com/MSOpenTech/redis/releases

    Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis

    img

    打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf

    如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:

    image

    第2步:编写代码

    1在settings.py中加入

    CELERY_BROKER_URL = 'redis://localhost'
    
    #: Only add pickle to this list if your broker is secured
    #: from unwanted access (see userguide/security.html)
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_RESULT_BACKEND = 'redis://localhost'
    CELERY_TASK_SERIALIZER = 'json'
    
    image.png

    2编写任务:

    import time
    from celery import Celery
    app = Celery('tasks', broker='redis://localhost', backend='redis://localhost')
    
    @app.task
    def add(x, y):
        time.sleep(15)   #使用sleep表示耗时操作
        print(2)
        return x+y
    
    image.png

    3在视图中调用tasks

    from django.http import HttpResponse
    from .tasks import add, add2
    def testCelery(request):
        print(add.delay(4, 4))
        print(add2.delay(5, 4))
        print('成功')
        return HttpResponse('成功')
    
    image.png

    4在url中注册接口

    from django.contrib import admin
    from django.urls import path
    from testCelery.views import testCelery
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('testCelery/', testCelery)
    ]
    

    第3步:启动redis、celery、django

    1:启动redis
    切换到redis安装目录下执行:redis-server.exe redis.windows.conf

    image.png
    2:启动celery
    执行celery -A untitled1 worker --pool=solo -l info
    3:启动django

    第4步:调用接口

    只耗时56ms,


    image.png

    celery任务耗时16秒,从而实现异步


    image.png

    源码

    相关文章

      网友评论

        本文标题:django+celery+redis框架搭建

        本文链接:https://www.haomeiwen.com/subject/epnueqtx.html