• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共43篇

    python3.X - Web - Django3.2.9

关闭

返回栏目

关闭

返回python3.X - Web - Django3.2.9栏目

38 - 扩展 - 定时任务 - django-celery-beat

作者:

贺及楼

成为作者

更新日期:2024-06-13 21:04:46

django-celery-beat

分布式任务队列

官网:
https://django-celery-beat.readthedocs.io/en/latest/

安装

celery版本 系统 支持
all Linux
4.0以上 Windows ×
4.0以下 Windows
命令 作用
pip install django-celery-beat 设置定时或周期任务
pip install django-celery-results 存储任务结果(看情况需要)
pip install eventlet windows下运行celery 4+版本,要装
pip install flower 监控celery运行任务状态

包的作用

创建应用和app

  1. django-admin startproject celery_demo # 创建项目
  2. python manage.py startapp demo # 创建app

celery_demo/celery_demo/celery.py

  1. from celery import Celery
  2. from django.conf import settings
  3. import os
  4. # 为celery设置环境变量
  5. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_demo.settings')
  6. # 创建应用
  7. app = Celery("demo")
  8. # 配置应用
  9. app.conf.update(
  10. # 配置broker, 这里我们用redis作为broker
  11. BROKER_URL='redis://:332572@127.0.0.1:6379/1',
  12. )
  13. # 设置app自动加载任务
  14. # 从已经安装的app中查找任务
  15. # 如果您的 INSTALLED_APPS 设置包括 app1、app2 和 app3,celery 将自动注册任何可以通过查看 app1.tasks、 找到的修饰任务app2.tasks 和 app3.tasks
  16. app.autodiscover_tasks(settings.INSTALLED_APPS)
  17. from .tasks import *

celery_demo/demo/tasks.py

  1. from celery_demo.celery import app
  2. import time
  3. # 加上app对象的task装饰器
  4. # 此函数为任务函数
  5. @app.task
  6. def my_task():
  7. print("任务开始执行....")
  8. time.sleep(5)
  9. print("任务执行结束....")

celery_demo/demo/views.py

  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. from .tasks import my_task
  4. def index(request):
  5. # 将my_task任务加入到celery队列中
  6. # 如果my_task函数有参数,可通过delay()传递
  7. # 例如 my_task(a, b), my_task.delay(10, 20)
  8. my_task.delay()
  9. return HttpResponse("<h1>服务器返回响应内容!</h1>")

celey_demo/urls.py

  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from demo.views import index
  4. urlpatterns = [
  5. url(r'^admin/', admin.site.urls),
  6. url(r'^$', index),
  7. ]

测试

  1. celery -A celery_demo worker -l info

创建worker等待处理celery队列中任务, 在终端执行命令

启动测试

  1. python manage.py runserver

celey_demo/settings.py

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'demo',
  9. 'django_celery_results', # 注意此处应用名为下划线
  10. 'django_celery_beat', # 插件用来动态配置定时任务,只要进行了第一步pip安装就可以直接注册了
  11. ]

celery_demo/celery_demo/celery.py 增加

  1. app.conf.update( CELERYBEAT_SCHEDULER='django_celery_beat.schedulers.DatabaseScheduler',
  2. )

注册app后就可以生成对应表

  1. python manage.py makemigrations # 不需要make直接下方migrate就可以生成表格
  2. python manage.py migrate
表名 models 释义
django_celery_beat_clockedschedule django_celery_beat.models.ClockedSchedule 特定时刻任务
django_celery_beat_crontabschedule django_celery_beat.models.CrontabSchedule 特定时间表任务,例如每周1运行的计划
django_celery_beat_intervalschedule django_celery_beat.models.IntervalSchedule 以特定间隔(例如,每5秒)运行的计划
django_celery_beat_periodictask django_celery_beat.models.PeriodicTask 此模型定义要运行的单个周期性任务
django_celery_beat_periodictasks django_celery_beat.models.PeriodicTasks 此模型仅用作索引以跟踪计划何时更改
django_celery_beat_solarschedule django_celery_beat.models.SolarSchedule 定制任务

加上django_celery_results还会有3个表
django_celery_results_chordcounter
django_celery_results_groupresult
django_celery_results_taskresult

celery beat --help

  1. 用法:celery beat[选项]
  2. 启动节拍周期性任务调度程序。
  3. beat选项:
  4. --detach 分离并作为在后台运行,守护进程。
  5. -s --schedule TEXT 明细表数据库的路径。默认为`celerybeat-schedule`。扩展名“.db”可以附加到文件名。
  6. -S, --scheduler TEXT 要使用的调度程序TEXT调度程序类。
  7. --max-interval INTEGER 最大间隔整数两个时间表之间睡眠的最大秒数迭代。
  8. -l --loglevel[DEBUG|INFO|WARNING|ERROR|CRITICAL|FATAL]日志记录级别。
  9. 后台处理选项:
  10. -f --logfile --日志文件文本
  11. --pidfile TEXT
  12. --uid文本
  13. --uid文本
  14. --gid文本
  15. --umask文本
  16. --executable 可执行文本
  17. 选项:
  18. --help显示此消息并退出。