django+celery异步消息队列

多任务队列demo

在这里插入图片描述

  1. 安装对应的库

pip3 install celery==4.4.2
pip3 install eventlet==0.25.2
pip3 install Django==2.0.4
  1. 配置settings文件

    这里broker配置redis,同时backend也就是任务结果也存到redis中,格式为json,方便读写。

    # 定义上传文件夹的路径
    UPLOAD_ROOT = os.path.join(BASE_DIR, 'static/upload')
    
    CELERY_BROKER_URL = 'redis://localhost:6379/'
    
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/'
    
    CELERY_RESULT_SERIALIZER = 'json'
    
  2. 创建与settings同级目录的celery.py

    mydjango为当前项目名称

    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery
    
    # 设置环境变量
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mydjango.settings')
    
    # 注册Celery的APP
    app = Celery('mydjango')
    # 绑定配置文件
    app.config_from_object('django.conf:settings', namespace='CELERY')
    
    # 自动发现各个app下的tasks.py文件
    app.autodiscover_tasks()
    
  3. 修改settings.py 同级目录下的init.py文件

    from __future__ import absolute_import, unicode_literals
    from .celery import app as celery_app
    
    #导包
    import pymysql
    #初始化
    pymysql.install_as_MySQLdb()
    
    
    
    __all__ = ['celery_app']
    
  4. 在应用中创建tasks.py文件

    from celery.task import task
    
    # 自定义要执行的task任务
    @task
    def print_test():
    	print("nict try")
    	return 'hello'
    
  5. 通过django视图调用异步请求

    from myapp import tasks
    
    def ctest(request,*args,**kwargs):
        res=tasks.print_test.delay()
        #任务逻辑
        return JsonResponse({'status':'successful','task_id':res.task_id})
    
  6. 启动celery服务 在manage.py同级目录下运行

    celery worker -A mydjango -l info -P eventlet
    

    如果请求是post方式 需要用此命令来启动服务

    celery worker -A mydjango -l info  --pool=solo
    
  7. 定时任务

    settings.py文件中

    from datetime import timedelta
    
    CELERY_BEAT_SCHEDULE = {
        # 定义定时任务
        'celery_work': {
            'task': "myapp.tasks.async_test",
            'schedule': timedelta(hours=2)
        }
    }
    

    如果需要启动定时任务,就需要在manage.py所在的文件夹内单独启动beat服务

    celery -A mydjango beat -l info
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值