zoukankan      html  css  js  c++  java
  • Django Celery定时任务


    安装
    celery
    redis
    eventlet
    django_celery_beat(安装后数据库迁移)

    1.项目目录创建celery.py

    # -*-coding:utf-8 -*-
    
    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery
    from django.utils import timezone
    
    # set the default Django settings module for the 'celery' program.
    env = os.environ.get('ENV')
    #
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings")
    
    app = Celery('celert-test')
    
    # Using a string here means the worker doesn't have to serialize
    # the configuration object to child processes.
    # - namespace='CELERY' means all celery-related configuration keys
    # should have a `CELERY_` prefix.
    app.config_from_object('django.conf:settings', namespace='CELERY')
    
    # Load task modules from all registered Django app configs.
    app.autodiscover_tasks()

    2.项目目录__init__

    from __future__ import absolute_import, unicode_literals
    
    # This will make sure the app is always imported when
    # Django starts so that shared_task will use this app.
    from .celery import app as celery_app
    
    __all__ = ('celery_app',)

    3.setting.py

    # celery 配置
    CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
    CELERY_TIMEZONE = 'Asia/Shanghai' ## 使用亚洲/上海时区
    CELERY_IGNORE_RESULT = True
    #设置存储Celery任务队列的Redis数据库
    CELERY_BROKER_URL = 'redis://:pwd@host:prot/1' # Broker配置,使用Redis作为消息中间件
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_TASK_SERALIZER = 'json'
    #设置存储Celery任务结果的数据库
    CELERY_RESULT_BACKEND = 'redis://:pwd@host:prot/1' # BACKEND配置,这里使用redis
    # CELERY_RESULT_BACKEND = 'django-db'
    # 避免时区的问题
    CELERY_ENABLE_UTC = False
    DJANGO_CELERY_BEAT_TZ_AWARE = False

    4.Xadmin.py

    from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask
    
    class PeriodicTaskAdmin(object):
    list_display = [
    'name', 'task', 'args', 'kwargs', 'queue',
    'exchange', 'routing_key', 'expires', 'enabled',
    'last_run_at', 'total_run_count', 'date_changed', 'description',
    'interval', 'crontab', 'solar', 'clocked', 'one_off',
    'start_time', 'priority', 'headers'
    ]
    ordering = ['id']
    search_fields = ['name']
    list_per_page = 10
    
    
    class IntervalScheduleAdmin(object):
    ordering = ['id']
    list_per_page = 10
    
    
    class CrontabScheduleAdmin(object):
    list_display = [
    'id',
    'minute',
    'hour',
    'day_of_week',
    'day_of_month',
    'month_of_year',
    'timezone'
    ]
    ordering = ['id']
    search_fields = ['minute']
    list_per_page = 10
    
    #定时
    xadmin.site.register(CrontabSchedule, CrontabScheduleAdmin)
    xadmin.site.register(IntervalSchedule, IntervalScheduleAdmin)
    xadmin.site.register(PeriodicTask, PeriodicTaskAdmin)

    5.在Xadmin中设置定时任务

      设置IntervalSchedule或者CrontabSchedule
      PeriodicTask中添加定时
    6.在Django启动的前提下,在项目目录路径下打开两个Terminl分别运行下面命令

    启动Celery
    celery -A main worker -l info -P eventlet
    启动定时任务
    celery -A main beat -l info -S django

     

  • 相关阅读:
    抓老鼠啊,亏了还是赚了
    币值转换
    2019春第七周作业
    2019春第六周作业
    2019春第五周作业
    2019年春季学期第四周作业
    2019年春季学期第三周作业
    2019年春季学期第二周作业
    在人生路上对我影响最大的三位老师
    第七周作业
  • 原文地址:https://www.cnblogs.com/daidechong/p/13445630.html
Copyright © 2011-2022 走看看