Django 使用Apscheduler执行定时任务

APScheduler是一个轻量级的Python库,用于调度作业(运行定时任务)。在Django中使用APScheduler,你可以设置定时任务,比如每天定时发送报告,或者定时清理无效数据。

以下是一个简单的例子,展示如何在Django项目中使用APScheduler:

1.首先,安装APScheduler:

python 复制代码
pip install apscheduler

2.在Django应用中创建一个任务文件,例如jobs.py

python 复制代码
from apscheduler.schedulers.background import BackgroundScheduler
import datetime
 
def my_job():
    print(f"任务执行:{datetime.datetime.now()}")
 
# 创建调度器
scheduler = BackgroundScheduler()
# 添加任务
scheduler.add_job(my_job, 'interval', minutes=1)
# 启动调度器
scheduler.start()

3.在Django的apps.py中启动调度器,确保在Django启动时任务能被加载:

python 复制代码
from django.apps import AppConfig
from .jobs import scheduler
 
class MyAppConfig(AppConfig):
    name = 'my_app'
 
    def ready(self):
        # 当Django应用就绪时,启动调度器
        scheduler.start()

4.在__init__.py中设置AppConfig:

python 复制代码
default_app_config = 'my_app.apps.MyAppConfig'

确保你的Django应用的名字替换成你实际的应用名。

以上代码将每分钟执行一次my_job函数。你可以根据需要调整任务的触发方式(例如,改变为每天或每小时一次)。记得在生产环境中部署时,确保调度器的启动逻辑只在一个进程中执行,避免多个进程执行相同任务的问题。

5.代码结构

6.代码优化:重复执行任务

python 复制代码
INSTALLED_APPS = (
    # ...
    "django_apscheduler",
)
python 复制代码
django_apscheduler_djangojob 表保存注册的任务以及下次执行的时间

django_apscheduler_djangojobexecution 保存每次任务执行的时间和结果和任务状态
python 复制代码
# views.py
from django_apscheduler.jobstores import DjangoJobStore, register_job

from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime

scheduler = BlockingScheduler()  # 创建调度器
scheduler.add_jobstore(DjangoJobStore(), "default")


# 添加定时任务方式一
@register_job(scheduler, "interval", seconds=5, id="func", replace_existing=True, misfire_grace_time=120)
def job():
    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))


# 添加定时任务方式二
def job1():
    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))


scheduler.add_job(
    job1,
    'interval',
    seconds=5,
    id='my_job',  # 任务的唯一标识
    replace_existing=True,
)

scheduler.start()
相关推荐
大布布将军1 小时前
⚡️ 深入数据之海:SQL 基础与 ORM 的应用
前端·数据库·经验分享·sql·程序人生·面试·改行学it
JIngJaneIL1 小时前
基于java+ vue农产投入线上管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
源代码•宸2 小时前
goframe框架签到系统项目(BITFIELD 命令详解、Redis Key 设计、goframe 框架教程、安装MySQL)
开发语言·数据库·经验分享·redis·后端·mysql·golang
川贝枇杷膏cbppg2 小时前
Redis 的 AOF
java·数据库·redis
TG:@yunlaoda360 云老大2 小时前
如何在华为云国际站代理商控制台进行SFS Turbo的性能与容量核查?
服务器·网络·数据库·华为云
ytttr8733 小时前
MATLAB基于LDA的人脸识别算法实现(ORL数据库)
数据库·算法·matlab
云老大TG:@yunlaoda3603 小时前
如何进行华为云国际站代理商跨Region适配?
大数据·数据库·华为云·负载均衡
思成不止于此3 小时前
【MySQL 零基础入门】事务精讲(二):ACID 特性与并发问题
数据库·笔记·学习·mysql
Boilermaker19923 小时前
[MySQL] 初识 MySQL 与 SQL 基础
数据库·mysql
今晚务必早点睡4 小时前
Redis——快速入门第二课:Redis 常用命令 + 能解决实际问题
数据库·redis·bootstrap