Django使用django-apscheduler实现定时任务

简介: 【7月更文挑战第8天】定时任务可以在后台定时执行指定的代码,避免了很多人为操作。下面是在Django项目中如何使用定时任务的具体操作流程

定时任务可以在后台定时执行指定的代码,避免了很多人为操作。下面是在Django项目中如何使用定时任务的具体操作流程。

我在这里使用的 django-apscheduler库来实现定时任务。

一、安装 django-apscheduler


pip install django-apscheduler



二、在项目的setting.py文件中修改配置

在INSTALLED_APPS 中添加 django_apscheduler 项。


image.png

三、通过命令生成定时任务记录表

在项目根目录,分别执行以下命令

1、根据数据库模型生成迁移文件

python manage.py makemigrations


2、执行迁移文件

python manage.py migrate

执行完以上两个命令后,在默认的数据库中会生成两个表,django_apscheduler_djangojobexecution 和 django_apscheduler_djangojob.


image.png

四、在项目中新建一个py文件,将所有需要定时执行的任务都保存在这个文件中。

比如我在项目的until目录中新建一个time.py文件。

image.png


打开这个文件将以下代码复制到文件中。

  • from django.shortcuts import render
  • # Create your views here.
  • from apscheduler.schedulers.background import BackgroundScheduler
  • from django_apscheduler.jobstores import DjangoJobStore, register_job
  • from until import logg
  • from app1 import tests
  • # 实例化调度器
  • scheduler = BackgroundScheduler()
  • # 调度器使用默认的DjangoJobStore()
  • scheduler.add_jobstore(DjangoJobStore(), 'default')
  • # 30秒循环执行
  • @register_job(scheduler, 'interval', id='test', seconds=30,args=['test'], replace_existing=True)
  • def test(s):
  •    tests.adddata()
  •    logg.info("30秒到了,开始执行")
  • # 每天八点半定时执行
  • @register_job(scheduler, 'cron', id='test1',hour=8, minute=30, args=['test'], replace_existing=True)
  • def test1(s):
  •    logg.info("开始执行")
  • # 单次定时执行
  • @register_job(scheduler, 'date', id='test2', run_date='2024-06-10 06:06:06',args=['test'], replace_existing=True)
  • def test2(s):
  •    logg.info("30秒到了,开始执行")
  • # 注册定时任务并开始
  • scheduler.start()


根据注释修改对应的定时任务和所要执行的方法就行。

主要的配置是触发器中的时间配置。可以参考以下参数。

  • date:任务只会执行一次。特定的时间点触发。

run_date (datetime 或 str) 作业的运行日期或时间

timezone (datetime.tzinfo 或 str) 指定时区

  • interval:固定时间间隔触发。

weeks (int) 间隔几周

days (int) 间隔几天

hours (int) 间隔几小时

minutes (int) 间隔几分钟

seconds (int) 间隔多少秒

start_date (datetime 或 str) 开始日期

end_date (datetime 或 str) 结束日期

timezone (datetime.tzinfo 或str) 时区

  • cron:在特定时间周期性地触发,和Linux crontab格式兼容。

year (int 或 str) 年,4位数字

month (int 或 str) 月 (范围1-12)

day (int 或 str) 日 (范围1-31

week (int 或 str) 周 (范围1-53)

day_of_week (int 或 str) 周内第几天或者星期几 (范围0-6 或者 mon,tue,wed,thu,fri,sat,sun)

hour (int 或 str) 时 (范围0-23)

minute (int 或 str) 分 (范围0-59)

second (int 或 str) 秒 (范围0-59)

start_date (datetime 或 str) 最早开始日期(包含)

end_date (datetime 或 str) 最晚结束时间(包含)

timezone (datetime.tzinfo 或str) 指定时区


五、配置好定时任务以后,需要在setting.py同目录的urls文件中引入刚才的文件



from until import ttime


image.png

六、然后就可以启动项目了,到时间就可以看到定时任务执行了



image.png





















目录
相关文章
|
3月前
|
调度 Python
在 Django 上实现定时任务的指南
在 Django 中实现定时任务有多种方法,包括使用 Celery 和 Celery Beat、django-background-tasks、以及 APScheduler。根据您的需求和应用场景,可以选择最适合的方案。每种方法都有其优缺点,选择时应考虑任务复杂性、系统资源、以及维护成本。通过这些工具,您可以有效地管理和调度后台任务,提高应用程序的自动化水平和运行效率。
|
5月前
|
存储 监控 调度
Django中的定时任务与后台任务队列的实践
【6月更文挑战第10天】在Django中实现定时任务和后台任务队列,可以使用Celery+Beat进行定时任务,Django Q处理后台任务。Celery配置包括设置Broker和Result Backend,创建Celery实例及任务。Django Q则涉及安装、配置ORM和创建任务。通过`async_task`将任务放入队列。注意性能、资源、安全和错误处理。使用时需考虑认证、输入验证、日志监控、部署策略和测试质量保障。
61 3
Django中的定时任务与后台任务队列的实践
|
调度 数据库 Python
Django实现定时任务
Django实现定时任务
164 0
|
JSON NoSQL Redis
Win11系统下使用Django+Celery实现异步任务队列以及定时(周期)任务(2020年最新攻略)
首先明确一点,celery4.1+的官方文档已经详细说明,该版本之后不需要引入依赖 django-celery 这个库了,直接用 celery 本身就可以了,就在去年年初的一篇文章[python3.7.2+Django2.0.4 使用django-celery遇到的那些坑](https://v3u.cn/a_id_54),中提到的一些bug,在今年早已不复存在,所以技术更新频率越来越快,本文详细阐述用新版Celery(4.4.2)来实现。
Win11系统下使用Django+Celery实现异步任务队列以及定时(周期)任务(2020年最新攻略)
|
Linux 测试技术 Python
|
监控 Python
Python编程:Django中使用Celery执行异步任务和定时任务
Python编程:Django中使用Celery执行异步任务和定时任务
227 0
|
Python NoSQL Redis
Django配置celery定时任务
安装celery 使用redis+celery的方式(使用的是阿里源,也可以选择不用) pip install -i https://mirrors.aliyun.com/pypi/simple/ -U "celery[redis]" 修改Django的settings配置文件 添加celery文件在app同级目录下添加一个文件夹,例:service_celery 在文件夹中添加celery.
|
Linux Python
django 定时任务 django-crontab 的使用
1、前言 在做 django 开发需求时,多多少少都会遇到需要定时任务的功能,比如定时执行任务,检查订单之类的。可能是一段时间,比如每隔 10分钟执行一次,也可能是定点时间,比如 14:00 执行,也可能是长时间,比如每周几,每个月的哪一天等。
4890 0
|
存储 消息中间件 NoSQL
Django配置celery(非djcelery)执行异步任务和定时任务
所有演示均基于Django2.0 celery是一个基于python开发的简单、灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度。采用典型的生产者-消费者模型,主要由三部分组成: 消息队列broker:broker实际上就是一个MQ队列服务,可以使...
2486 0