当前位置: 首页 > news >正文

Django框架使用定时器-APScheduler实现定时任务:django实现简单的定时任务

一、系统环境依赖

系统:windows10

python: python==3.9.0

djnago==3.2.0

APScheduler==3.10.1

二、django项目配置

1、创建utils包,在包里面创建schedulers包

utils/schedulers/task.py

#1、设置 Django 环境,就可以导入项目的模型类这些了
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "项目根目录名.settings")
import django
django.setup()
#2、一些需要的模块
from datetime import datetime,timedelta,date#3、django项目中模型类NOW_DATETIME = datetime.strftime(datetime.now(),'%Y-%m-%d %H:%M:%S')
NOW_DATE = date.today().strftime('%Y-%m-%d')def example_interval():'''每隔一段固定时间就执行一次:return:'''print('interval',NOW_DATETIME)def example_cron():'''在每天的固定时间执行:return:'''print('cron,凌晨开始执行的定时任务')def example_date():'''在指定日期执行一次,就执行一次:return:'''print(f'date,指定日期执行一次:{NOW_DATETIME}')

utils/schedulers/scheduler.py

# 2、导入所需的调度器类和触发器类
from apscheduler.jobstores.memory import MemoryJobStore
from apscheduler.jobstores.redis import RedisJobStore
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger
from apscheduler.triggers.cron import CronTrigger
from apscheduler.triggers.date import DateTrigger
from pytz import timezone
from threading import RLock
from django.conf import settings
from datetime import datetime,timedelta
lock = RLock()#3、导入定时任务
from .task import example_interval   #例子,时间间隔,每隔一段时间执行
from .task import example_cron  #指定时间执行,在指定时间点执行
from .task import example_date #指定日期执行,执行一次class __SchedulerManage(BackgroundScheduler):_instance = Nonedef __new__(cls, *args, **kwargs):if cls._instance:return cls._instancewith lock:if cls._instance:return cls._instancecls._instance = super().__new__(cls)return cls._instancedef __init__(self):super().__init__()# 1、设置时区self.timezone = timezone(settings.TIME_ZONE)# 2、使用内存存储定时任务信息jobstore_redis = RedisJobStore(host='localhost', port=6379, db=0, password='redis密码')jobstore_memory = MemoryJobStore()self.add_jobstore(jobstore_memory)# 3、添加任务self.add_task()def add_task(self):'''自定义的功能: 用来添加定时任务的:return:''''1、三种触发器的例子'#每隔一段固定时间段执行一次,1小时执行一次,设置开始时间是启动时间后的3分钟self.add_job(example_interval, trigger=IntervalTrigger(hours=1,start_date=datetime.now()+timedelta(minutes=3)), id='example_interval', replace_existing=True)#设置每天的11:03:10 执行一次self.add_job(example_cron,trigger=CronTrigger(hour=11,minute=3,second=10),id='example_cron',replace_existing=True)#设置在2023-08-10 11:03:01执行一次,只执行一次self.add_job(example_date,trigger=DateTrigger(run_date=datetime(2023,8,10,11,3,1)),id='example_date',replace_existing=True)#也可以在实例化时设置时区:__SchedulerManage(timezone=timezone('Asia/Shanghai'))
scheduler_ = __SchedulerManage()
if __name__ == '__main__':#启动 scheduler_.start()  或者 scheduler_() 两种方式都okscheduler_()

utils/schedulers/__init__.py

from .scheduler import scheduler_

2、项目配置文件settings.py

####配置定时任务
#启动定时任务
from utils.schedulers import scheduler_
scheduler_.start()

http://www.lryc.cn/news/129783.html

相关文章:

  • Go学习笔记之数据类型
  • Spring Cloud 微服务
  • SpringBoot属性配置
  • 算法通关村第十关 | 归并排序
  • SpringBoot3集成Kafka
  • css学习1
  • rust踩雷笔记(1)——切片传参和解引用赋值
  • 安全 1自测
  • 寻路算法小游戏
  • CSS基础 知识点总结
  • 自动执行探索性数据分析 (EDA),更快、更轻松地理解数据
  • 【自定义系统服务】【android13】添加自定义java系统服务
  • 【Sklearn】基于随机梯度下降算法的数据分类预测(Excel可直接替换数据)
  • 44、TCP报文(二)
  • 目标检测(Object Detection)
  • vue中实现文字检索时候将搜索内容标红
  • PCL protocol composition logic
  • 聊聊看React和Vue的区别
  • OSPF在广播类型的网络拓扑中DR和BDR的选举
  • 系统学习Linux-Mariadb高可用MHA
  • 慢SQL的原因
  • php正则替换文章的图片
  • 57 | TAPTAP客户端分析
  • 开源了一套基于springboot+vue+uniapp的商城,包含分类、sku、商户管理、分销、会员、适合企业或个人二次开发
  • Android进阶之多级列表
  • Stochastic: Distribution-Expectation-Inequalities
  • Java算法_ 二叉树的最大深度(LeetCode_Hot100)
  • 行业追踪,2023-08-18
  • js将项目中的图片上传到服务器
  • 【C语言】指针的进阶