zoukankan      html  css  js  c++  java
  • 【Python】Django2.0集成Celery4.1详解

    环境准备

    • Python3.6
    • pip install Django==2.0.1
    • pip install celery==4.1.0
    • pip install eventlet (加入协程支持)
    • 安装erlang和rabbitMQ-server

    配置settings.py文件

    • 在settings.py文件中添加如下内容
    ...
    LANGUAGE_CODE = 'zh-hans'
    TIME_ZONE = 'Asia/Shanghai'
    USE_I18N = True
    USE_L10N = True
    USE_TZ = False
    
    CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672'

    在settings.py同级目录创建celery.py

    • celery.py
    • 注意替换: project_name
    # -*- coding: utf-8 -*-
    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery
    
    # 设置环境变量
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')
    
    # 注册Celery的APP
    app = Celery('project_name')
    # 绑定配置文件
    app.config_from_object('django.conf:settings', namespace='CELERY')
    
    # 自动发现各个app下的tasks.py文件
    app.autodiscover_tasks()

    修改settings.py同级目录的init.py文件

    from __future__ import absolute_import, unicode_literals
    from .celery import app as celery_app
    
    __all__ = ['celery_app']

    在某个APP中创建tasks.py文件

    • tasks.py
    # -*- coding: utf-8 -*-
    
    from celery.task import task
    
    # 自定义要执行的task任务
    @task
    def print_hello():
        return 'hello celery and django...'

    配置周期性任务或定时任务

    from celery.schedules import crontab
    CELERY_BEAT_SCHEDULE = {
        # 周期性任务
        'task-one': {
            'task': 'app.tasks.print_hello',
            'schedule': 5.0, # 每5秒执行一次
            # 'args': ()
        },
        # 定时任务
        'task-two': {
            'task': 'app.tasks.print_hello',
            'schedule': crontab(minute=0, hour='*/3,10-19'),
            # 'args': ()
        }
    }

    启动worker和定时任务

    • 启动worker (切换到manage.py同级目录下执行)
    celery -A project_name worker -l info -P eventlet
    • 启动定时任务或周期性任务
    celery -A project_name beat -l info
    • 后台启动定时任务或周期性任务

       celery multi start w1 -A fushentang -l info -P eventlet


    存放任务结果的扩展

    • pip install django-celery-results
    • Install APP
    INSTALLED_APPS = (
        ...,
        'django_celery_results',
    )
    • 生成数据库表:python manage.py migrate django_celery_results
    • 配置settings:CELERY_RESULT_BACKEND = 'django-db' (用数据库存放任务执行结果信息)
  • 相关阅读:
    mysql索引
    mysql主从复制(同步)
    MySQL事务与锁
    四大高阶函数
    客户端、服务端通信值统计字符串个数【网络程序设计
    《Unicast QoS Routing Algorithms for SDN Survey 2018》【毕设
    CDQ分治【待补充,数据结构
    KD树学习小结【待补充,数据结构
    线段树模板【数据结构
    【牛客网】牛客练习赛19 F 算式子【数学--递推 、前缀、数字】
  • 原文地址:https://www.cnblogs.com/thinheader/p/9455705.html
Copyright © 2011-2022 走看看