python 定时器

2023-10-26

1、BlockingScheduler库

缺点:会阻塞代码

优点:调用定时函数时方便灵活定义定时,比如间隔多长时间调用一次,比如那几个月调用一次

代码:

from apscheduler.schedulers.blocking import BlockingScheduler
import datetime

# 这个定时是阻塞定时
# 循环调用
# 该定时器的函数可以随意定时间,包括每天或者某一天,某几个月的,哪个时间点进行触发

'''
首先看看周一到周五定时执行任务


# 输出时间
def job():
    print(datetime.now().strtime("%Y-%m-%d %H:%M:%S"))


# BlockingScheduler
scheduler = BlockingScheduler()
scheduler.add_job(job, "cron", day_of_week = "1-5", hour = 6, minute = 30)
schduler.start()

scheduler.add_job(job, 'cron', hour=1, minute=5)

hour = 19, minute = 23
这里表示每天的19:23
分执行任务
hour = '19', minute = '23'
这里可以填写数字,也可以填写字符串
hour = '19-21', minute = '23'
表示
19: 23、 20: 23、 21: 23
各执行一次任务

# 每300秒执行一次
scheduler.add_job(job, 'interval', seconds=300)

# 在1月,3月,5月,7-9月,每天的下午2点,每一分钟执行一次任务
scheduler.add_job(func=job, trigger='cron', month='1,3,5,7-9', day='*', hour='14', minute='*')

# 当前任务会在 6、7、8、11、12 月的第三个周五的 0、1、2、3 点执行
scheduler.add_job(job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')

# 从开始时间到结束时间,每隔俩小时运行一次
scheduler.add_job(job, 'interval', hours=2, start_date='2018-01-10 09:30:00', end_date='2018-06-15 11:00:00')


'''



def startCronTask(task, **config):
    # BlockingScheduler
    scheduler = BlockingScheduler()
    scheduler.add_job(task, 'interval', **config)
    scheduler.start()


def userCountFunc():
    # 获取当前时间
    current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print(current_time)
    print("hello world")
    # 获取当前时间
    current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print(current_time)


def main():
    # 获取当前时间
    current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print(current_time)
    startCronTask(userCountFunc, minutes=1)

    # 获取当前时间
    current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print(current_time)

if __name__ == '__main__':
    main()

2、threading

线程定时

缺点:需要在定时器执行函数内部重复构造定时器,才能达到重复循环定时的目的

优点:不阻塞程序

代码:

import threading
import datetime
import time

# 使用threading线程定时,该定时不堵塞


# 如果需要传参
def timerFunc():
    print('Hello World~')

    #想要进行循环定时必须在定时器执行函数内部重复构造定时器,因为定时器构造后只执行1次,必须循环调用
    ''''''
    global timer
    timer = threading.Timer(10, timerFunc)
    timer.start()

# 此处要用引用函数的格式timerFunc,而不是运行函数的格式timerFunc(),不然会报错
timer = threading.Timer(10, timerFunc)
timer.start()
# 如果调用的函数需要传参
'''
#函数名后以逗号分割进行传参
timer = threading.Timer(10, timerFunc,"a")
timer.start()
'''


time.sleep(60)
# 取消定时
timer.cancel()

备注:threading模块传参的时候可以在调用函数名后,以,分割,直接赋值。

平常建议使用第二种,不堵塞,用起来也简单,快。

第一种使用想解决堵塞应该可以用多线程和多进程,来防止定时器执行函数堵塞代码。

申明:本人菜鸡,该文章只做个人记录、备忘使用,出现错误请海涵。

目录

1、BlockingScheduler库

2、threading


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 定时器 的相关文章

随机推荐

  • 微信小程序之微信登录

    在开发微信小程序的时候 我们经常需要用到微信登录 通过wx的接口来获取微信用户的信息 然后存储到我们数据库来创建属于我们系统的用户信息 所以我们就要使用到wx login wx getUserProfile 这两个方法 wx login w
  • 向量点乘叉乘等理解和应用

    https baike baidu com item E5 90 91 E9 87 8F 1396519 fr aladdin 1 标量和矢量 2 1 2 3 2 4 6 2 4 6 2 1 2 3 2 矢量和矢量的加减 三角形定则解决向量
  • 程序员3年5年10年三个阶段

    第一阶段 三年 三年对于程序员来说是第一个门槛 这个阶段将会淘汰掉一批不适合写代码的人 这一阶段 我们走出校园 迈入社会 成为一名程序员 正式从书本上的内容迈向真正的企业级开发 我们知道如何团队协作 如何使用项目管理工具 项目版本如何控制
  • 奇偶剪枝算法

    奇偶剪枝是数据结构的搜索中 剪枝的一种特殊小技巧 现假设起点为 sx sy 终点为 ex ey 给定t步恰好走到终点 如图所示 竖走 横走 转弯 易证abs ex sx abs ey sy 为此问题类中任意情况下 起点到终点的最短步数 记做
  • 弱网使用教程

    Network Emulation for Windows Toolkit 1 下载安装包 默认安装 下载地址 https drive google com file d 1jvviwEDRx2UtmpUxe1 Sy94E3wBao5Ot
  • 基于51单片机的红外解码器

    1 简介 本红外解码器是以MCS 51系列AT89C512片机为核心 将红外传感器接收的信号解析出来 LCD1602显示屏将解码数据显示出来 2 总体原理图 硬件组成 单片机最小系统 LCD1602显示屏 IR红外接收器 系统电源 3 程序
  • 数据结构---n皇后问题

    n皇后问题 题目描述 JAVA实现 力扣提交代码 n皇后问题 题目描述 对于四皇后问题的解 放置一个皇后 棋盘被占据的解为 很明显 每行只能放置 且只能放置一个皇后 代码中 queen row 1 来实现的 一个完整的示例 放第一个皇后 放
  • 抖音将会输给快手?时间会证明一切

    为什么快手产品的主界面上没有设置频道分类 这样带来的用户体验真的好吗 在快手一个月之前的员工大会上 入职不久的新员工赵波提出了这个疑问 这个问题不只是他一个人的 之前官方的解答是 不意给用户设置标签是为了保持界面简洁 不对内容做过多的评判
  • i.MX6ULL - 从零开始移植uboot-imx_v2020.04_5.4.70_2.3.0

    i MX6ULL 从零开始移植uboot imx v2020 04 5 4 70 2 3 0 目录 i MX6ULL 从零开始移植uboot imx v2020 04 5 4 70 2 3 0 前言 1 环境搭建 2 NXP官方原版UBOO
  • 一文解决VS Code安装、C++环境配置、OpenCV配置

    前言 本文包括VScode安装 C 环境配置以及OpenCV配置全过程 VS Studio配置OpenCV比较简单 可以直接使用OpenCV官网已有的用VS Studio编译器编译好的OpenCV库 但VS Code不能直接利用VS Stu
  • Android:基本程序单元 Activity

    Activity 概述 在 Android 应用中 提供了 4 大基本组件 分别是 Activity Service BroadcastReceiver 和 ContentProvider 而 Activity 是 Android 应用最常
  • QApplication与QCoreApplication

    QApplication GUI 程序中 有且仅有一个 QApplication 类 管理GUI程序的控制流和主设置 QApplication 包含主事件循环 所有来自窗口系统和其他源的事件将被处理和分配 它也处理程序的初始化 析构和提供会
  • **vue.esm.js?efeb:591 [Vue warn]: Invalid prop: type check failed for prop "data". Expected Array

    vue esm js efeb 591 Vue warn Invalid prop type check failed for prop data Expected Array got String 有可能是这几种情况
  • CyclicBarrier底层源码解析

    一 概述 前面我们讲解了ReentrantLock CountDownLatch Semaphore的源码 他们都是由AQS来实现的 而CyclicBarrier则是通过ReentrantLock Condition实现的 CyclicBa
  • 达夫设备简单介绍

    前言 想到肯哥每天的Open话题 总能学到一些知识 怕忘记 所以我就当成博客记录一下了 今天要记录的是2023年6月5日 肯哥的技术交流群里面的一个代码 肯哥话题 肯哥的原话 hello 又到了每天的open话题时刻 今天我们聊点技术的东西
  • MATLAB学习——Matlab系统环境介绍

    本篇文章并不涉及Matlab的具体使用方法和相关函数 仅仅是和大家一起熟悉Matlab的操作界面 祝大家小年快乐 记得吃糖瓜 总体来说 Matlab的使用界面和office的使用界面具有很高的相似性 因此 对于要熟悉Matlab使用的初学者
  • JVM内存分配机制

    学习了JVM的内存分配机制为大家分享一下 现在把学习笔记总结记录一下 如果记录有些错误 还望指出 一 对象的创建 对象创建的主要流程 1 类加载检查 虚拟机遇到一条new指令时 首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引
  • 【 OpenCV】——图像缩放

    OpenCV 图像缩放 前言 本文介绍了图像放大 图像放小基础内容 使用步骤 1 引入库 include
  • 第五章 运输层 ---概述,端口号,复用,分用

    第五章 运输层 概述 端口号 复用 分用 5 1 运输层概述 作用范围与简介 总结 5 2 运输层端口号 复用 分用的概念 运输层端口号 发送方的复用与接收方的分用 TCP IP体系的应用层常用协议所使用的运输层熟知端口号 5 1 运输层概
  • python 定时器

    1 BlockingScheduler库 缺点 会阻塞代码 优点 调用定时函数时方便灵活定义定时 比如间隔多长时间调用一次 比如那几个月调用一次 代码 from apscheduler schedulers blocking import