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

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

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

一、安装 django-apscheduler

复制代码
pip install django-apscheduler

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

在INSTALLED_APPS 中添加 django_apscheduler 项。

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

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

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

复制代码
python manage.py makemigrations

2、执行迁移文件

复制代码
python manage.py migrate

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

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

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

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

复制代码
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

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

相关推荐
袋鼠云数栈8 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛139246256739 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256739 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_11 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz11 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪12 小时前
【多线程】Lock与Condition
大数据·数据库
Lightpwd12 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
数据库·后端
LabVIEW开发12 小时前
LabVIEW 64位安装的位深陷阱:工具包、内存与工程兼容
数据库·labview·labview知识·labview功能·labview程序
寺中人13 小时前
MySQL 8.0 Windows 完整安装教程:环境配置、密码重置与常见报错排查
数据库·windows·mysql·环境搭建·mysql 安装
这个DBA有点耶13 小时前
同样48核配置TPS差1倍?高性价比数据库一体机的“软硬协同”才是分水岭
服务器·数据库·架构