当前位置 主页 > 网站技术 > 代码类 >

    Python Django2.0集成Celery4.1教程

    栏目:代码类 时间:2019-11-19 21:07

    环境准备

    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...'
    

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

    再次编辑settings.py文件,添加如下内容

    定时任务的配置格式参考:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html

    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

    这里备注一下:最好使用supervisord来管理上面这2条命令

    存放任务结果的扩展

    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' (用数据库存放任务执行结果信息)

    以上这篇Python Django2.0集成Celery4.1教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持IIS7站长之家。