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

这篇具有很好参考价值的文章主要介绍了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 = None
    def __new__(cls, *args, **kwargs):
        if cls._instance:
            return cls._instance
        with lock:
            if cls._instance:
               return cls._instance
            cls._instance = super().__new__(cls)
            return cls._instance

    def __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_() 两种方式都ok
    scheduler_()

utils/schedulers/__init__.py

from .scheduler import scheduler_

2、项目配置文件settings.py文章来源地址https://www.toymoban.com/news/detail-653156.html

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

到了这里,关于Django框架使用定时器-APScheduler实现定时任务:django实现简单的定时任务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32使用定时器实现微秒(us)级延时

    目前开发STM32普遍使用HAL库,但 HAL 库封装的延时函数目前仅支持 ms 级别的延时,日常很多情况下会用到 us 延时,特别是一些传感器的数据读取过程,对时序要求比较严格,us 延时必不可少,因此我们今天来介绍STM32如何使用定时器实现微秒(us)级延时。 Keil 5 STM32CubeMX STM

    2024年02月12日
    浏览(45)
  • STM32不使用中断实现定时器微秒级精确延时

    我们在写代码的时候避免不了要使用延时函数,很多延时函数都是使用中断或者tick来实现的,tick的方式最大到毫秒ms级别,通过中断方式的通用定时器来实现,如果实现1us的延时那么每1us就来一次中断,很影响cpu的效率。 本文提供一种 不使用中断 ,并且很简单的方式实现的

    2024年04月11日
    浏览(29)
  • NodeMCU ESP8266 的定时器使用以及非堵塞程序的实现

    本文会介绍ESP8266的定时器使用方法,传统的延时函数存在堵塞占用CPU的问题,后面对于系统中有延时以及定时的功能要求,怎么做才能是系统更加高效合理,我们来进一步学习一下。 通常我们使用 delay() 函数来进行一定时间的延时,这个函数接收一个 Int 型的传入参数,来制

    2024年02月04日
    浏览(33)
  • Python - 定时任务框架【APScheduler】基本使用详解(一)

    一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力 我们可以使用Django的模板渲染功能完成页面渲染 APScheduler的全称是Advanced Python Scheduler。它是一个

    2024年02月09日
    浏览(25)
  • 搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

    搭建了基础的环境,配置了一个简单的工程后,CubeMx的基本操作就会了。然后基于这个操作往下推进,开始对关键模块定时器的攻略,这个部分需要先熟悉一下Stm32的定时器基本原理。 《STM32参考手册》中仅对定时器的介绍就已经占了100多页,这里就不一一展开,挑一些关键

    2024年02月06日
    浏览(64)
  • 【Qt】定时器处理——定时器事件类QTimerEvent和定时器类QTimer使用

    Qt的定时器只能通过纯代码实现,定时器顾名思义,主要作用是定时特定的时间。 Qt提供了定时器事件类 QQTimerEvent 和定时器类 QTimer 实现定时器操作。 Qt提供了更高层次的定时器编程接口** QTimer **类,可以使用信号和槽,还可以设置定时一次。比较常用的方法有: QTimer::set

    2024年02月05日
    浏览(33)
  • JavaScript中两种定时器和清除定时器的使用

    ​ 定时器就是在一段特定的时间后执行某段程序代码。 以指定的时间间隔(时间单位为毫秒)调用一次函数的定时器。 轮循定时器是以指定的时间间隔(时间单位为毫秒)重复调用一个函数的定时器。 clearTimeout(timeoutID) :清除只执行一次的定时器(setTimeout函数)。 timeoutID 为

    2024年02月13日
    浏览(28)
  • 蓝桥杯单片机学习6——定时器/计数器&定时器实现秒表功能

    上一期我们学习了外部中断的相关内容,现在我接着来学习定时器。 定时器/计数器是一种能够对内部时钟信号或者外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断请求,从而实现定时或计数功能的外设。定时器的基本工作原理是进行计数。 举个栗子 :你可

    2024年02月04日
    浏览(36)
  • STC15W104 定时器实现灯的闪烁(定时器原理讲解)

    STC15W104单片机共有2个定时器,分别为定时器0、定时器2。 定时器是单片机中的一种常用外设,用于在一定时间间隔内产生中断。 定时器通常用于计时、测量时间间隔、生成PWM信号等应用中。 在STC15W104单片机中,定时器可以被配置为定时器/计数器模式。 在定时器模式下,定

    2024年02月13日
    浏览(27)
  • js实现定时器

    用原生js实现一个倒计时效果.最下面有全部源码,需要自取 js语法 : setTimeout :定时器 document.getElementById :Document的方法 getElementById()返回一个匹配特定 ID的元素。由于元素的 ID 在大部分情况下要求是独一无二的,这个方法自然而然地成为了一个高效查找特定元素的方法。 remove

    2024年02月11日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包