该插件从 Django 管理界面管理celery的定期任务,您可以在其中动态****创建、编辑和删除定期任务以及它们的运行频率。

django-celery-beat提供了几种添加定时或周期性任务的方式,

  • 预先在在settings.py中添加好定时任务。
  • 通过Django admin后台动态添加。(实际上就是操作model模型类)
  • 通过提供了model模型类操作并添加。

安装和基本使用

  1. 安装
pip install django-celery-beat
  1. django_celery_beat 模块添加到 Django 项目的 settings.py 中的 INSTALLED_APPS 中:
INSTALLED_APPS = (
...,
'django_celery_beat',
)
  1. 应用 Django 数据库迁移以便创建必要的表
python manage.py migrate django_celery_beat

  1. 使用 django_celery_beat.schedulers:DatabaseScheduler 调度程序启动 celery beat 服务。
$ celery -A proj beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler [-P eventlet]

如果觉得麻烦可以提前设置好celery的beart-scheduler选项:

https://docs.celeryq.dev/en/latest/userguide/configuration.html#beat-scheduler

或者可以用下面这个命令方式,可以快捷指定为django_celery_beat.schedulers:DatabaseScheduler

$ celery -A [project-name] beat -l info -S django [-P eventlet]

开发环境下,为了方便,可以将worker和beat一起用一条命令启动(生产环境不允许这样做!!!!)【windows不支持!】

$ celery -A [project-name] worker --beat --scheduler django --loglevel=info [-P eventlet]
# windows 记得用eventlet来启动,不然挂挂...
  1. 访问django Admin后台,就可以直接管理任务了!

注意:celery.backend_cleanup任务是自动生成的,不要去删他...是用来清除存储在result_backend中的任务执行结果。

关于时区的重要警告

如果您更改 Django TIME_ZONE 选项设置,您的定期任务计划仍将基于旧时区。

要解决这个问题,您必须重置每个定期任务的“上次运行时间”:

>>> from django_celery_beat.models import PeriodicTask, PeriodicTasks
>>> PeriodicTask.objects.all().update(last_run_at=None)
>>> for task in PeriodicTask.objects.all():
>>> PeriodicTasks.changed(task)

Note:这将重置状态,就好像定期任务以前从未运行过一样。

操作django_celery_beat提供的model动态添加任务

https://pypi.org/project/django-celery-beat/

https://docs.celeryq.dev/en/latest/userguide/periodic-tasks.html

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

模型:

  • django_celery_beat.models.PeriodicTask

    • 该模型定义了要运行的单个周期性任务,与下面4个调度器模型一起使用。
  • django_celery_beat.models.IntervalSchedule
    • 用于定义时间间隔,比如,每2分钟、每1小时。
  • django_celery_beat.models.CrontabSchedule
    • 用于定义类似linux的crontab任务(conrtab实际上可以涵盖IntervalSchedule
  • django_celery_beat.models.SolarSchedule
    • 用于定义:基于太阳升起、日落、经度纬度来定义任务执行【一般用不上...】
  • django_celery_beat.models.ClockedSchedule
    • 定义指定日期时间执行任务。比如:我要2023年1月1号,10点10分30秒执行。

查看所有周期性任务:

>>> from django_celery_beat.models import CrontabSchedule, PeriodicTask
>>> PeriodicTask.objects.all()
<PeriodicTaskQuerySet [<PeriodicTask: test add: 每 分钟>, <PeriodicTask: celery.backend_cleanup: 0 4 * * * (m/h/dM/MY/d) Asia/Shanghai>, <PeriodicTask: add every 2min gen index page: */2 * * * * (m/h/dM/MY/d) Asia/Shanghai>]>

django-celery-beat插件使用的更多相关文章

  1. django 异步任务实现及Celery beat实现定时/轮询任务

    Celery定时任务 requirements celery==3.1.25 异步任务 django-celery==3.2.2 定时任务管理包 redis==2.10.6 django-redis- ...

  2. django celery的分布式异步之路(一) 起步

    如果你看完本文还有兴趣的话,可以看看进阶篇:http://www.cnblogs.com/kangoroo/p/7300433.html 设想你遇到如下场景: 1)高并发 2)请求的执行相当消耗机器资 ...

  3. Celery beat实现定时/轮询任务

    Celery定时任务 配置 启用Celery的定时任务需要设置CELERYBEAT_SCHEDULE .  Celery的定时任务都由celery beat来进行调度.celery beat默认按照s ...

  4. django celery redis 定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  5. django+celery 实现定时任务

    利用 celery 实现定时任务 celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat Celery安装 由于celery 4. ...

  6. Django --- celery异步任务与RabbitMQ模块

    一 RabbitMQ 和 celery 1 celery Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务, ...

  7. django+celery+redis实现运行定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  8. django & celery - 关于并发处理能力和内存使用的小结

    背景 众所周知,celery 是python世界里处理分布式任务的好助手,它的出现结合赋予了我们强大的处理异步请求,分布式任务,周期任务等复杂场景的能力. 然鹅,今天我们所要讨论的则是如何更好的在使用 ...

  9. Django + celery +redis使用

    1.安装包 pip install celery pip install django-celery pip install pymysql 2.创建一个django项目 - proj/ - proj ...

  10. 06: django+celery+redis

    目录: 1.1 Celery介绍 1.2 celery 组件 1.3 安装相关包 与 管理命令 1.4 celery与Django执行异步任务 1.5 在django中使用计划任务功能 1.1 Cel ...

随机推荐

  1. dotnet SemanticKernel 入门 自定义变量和技能

    本文将告诉大家如何在 SemanticKernel 框架内定义自定义的变量和如何开发自定义的技能 本文属于 SemanticKernel 入门系列博客,更多博客内容请参阅我的 博客导航 自定义变量是一 ...

  2. iframe子窗口调用父窗口方法

    //一个iframe页面调用另一个iframe页面的方法self.parent.frames["sort_bottom"].mapp($("#id").val( ...

  3. 问题总结:浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals来判断

    浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals来判断. 说明:浮点数采用"尾数+阶码"的编码方式,类似于科学计数法的"有效数字+指数& ...

  4. BZ全景可视化编辑器 (KRPano可视化编辑器, 无需编写任何代码制作全景漫游)

    软件简介 BZ全景编辑器是一款KRPano全景可视化编辑工具,下载安装即可使用,无需拥有任何KRPano代码基础,便可以制作生成精美的全景漫游作品. 官方网站: 点击进入官方网站 最新版软件下载地址: ...

  5. [Servlet/Tomcat] HttpServletRequest#getHeader(headerNameWithIgnoreCase)(获取header时不区分大小写)

    1 故事背景 最近项目上有个业务需求,翻译成技术需求,即:将request.headers中的几个header入参转换成request.body(pageRequest)中的内置参数. 为便于灵活配置 ...

  6. c语言代码练习15

    //使用togo跳转代码,阻止关机#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> ...

  7. git Failed to connect to 127.0.0.1 port xxxx: Connection refused 的问题。

    问题描述在使用 git 拉取.提交代码的时候,会出现 git Failed to connect to 127.0.0.1 port xxxx: Connection refused 的问题. 原因: ...

  8. vue项目打包,解决静态资源无法加载和路由加载无效(404)问题

    打包后的项目静态资源无法使用,导致页面空白 静态资源无法使用,那就说明项目打包后,图片和其他静态资源文件相对路径不对,此时找到config里面的index.js,在build模块下加入assetsPu ...

  9. MongoDB 中的索引分析

    MongoDB 的索引 前言 MongoDB 使用 B 树还是 B+ 树索引 单键索引 创建单键索引 使用 expireAfterSeconds 创建 TTL 索引 复合索引 最左匹配原则 ESR 规 ...

  10. 使用 GitHub Action 自动更新 Sealos 集群的应用镜像

    在 IT 领域,自动化无疑已成为提高工作效率和减少人为错误的关键.Sealos 作为一个强大的云操作系统,已经为许多企业和开发者提供了稳定可靠的服务.与此同时,随着技术不断发展,集成更多的功能和服务变 ...