iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python实现定时器的5种方法
  • 254
分享到

python实现定时器的5种方法

python 定时器 2023-03-06 08:03:50 254人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 使用time,threading 模块2. 使用datetime,threading 模块3. 使用time,schedule 模块 (执行单个任务)4. 使用time,s

1. 使用time,threading 模块

第一种:

代码实现:

# -*- coding:utf-8 -*-
import threading
import time
cancel_tmr = False
def start():
	#具体任务执行内容
    print("hello world")

def heart_beat():
	# 打印当前时间
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
    if not cancel_tmr:
        start()
        # 每隔3秒执行一次
        threading.Timer(3, heart_beat).start()
if __name__ == '__main__':
    heart_beat()
    # 15秒后停止定时器
    time.sleep(15)
    cancel_tmr = True

第二种:

# -*- coding:utf-8 -*-
import threading
import time
exec_count = 0
def start():
    print("hello world", exec_count)
def heart_beat():
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
    global exec_count
    exec_count += 1
    # 执行15次后停止定时器
    if exec_count < 15:
        start()
        threading.Timer(5, heart_beat).start()
if __name__ == '__main__':
    heart_beat()

2. 使用datetime,threading 模块

要求:每天凌晨3点执行func方法。

代码实现:

# -*- coding:utf-8 -*-
import datetime
import threading

def func():
    print("haha")
    # 如果需要循环调用,就要添加以下方法
    timer = threading.Timer(86400, func)
    timer.start()

# 获取现在时间
now_time = datetime.datetime.now()
# 获取明天时间
next_time = now_time + datetime.timedelta(days=+1)
next_year = next_time.date().year
next_month = next_time.date().month
next_day = next_time.date().day
# print(next_time, next_year, next_month, next_day)
# 获取明天3点时间
next_time = datetime.datetime.strptime(str(next_year) + "-" + str(next_month) + "-" + str(next_day) + " 03:00:00", "%Y-%m-%d %H:%M:%S")
# print(next_time)
# # 获取昨天时间
# last_time = now_time + datetime.timedelta(days=-1)

# 获取距离明天3点时间,单位为秒
timer_start_time = (next_time - now_time).total_seconds()
print(timer_start_time)
# 54186.75975
# 定时器,参数为(多少时间后执行,单位为秒,执行的方法)
timer = threading.Timer(timer_start_time, func)
timer.start()

3. 使用time,schedule 模块 (执行单个任务)

schedule:一个轻量级的定时任务调度的库。

代码实现:

# !/usr/bin/env python
# -*- coding:utf-8 -*-
import schedule
import time

def job(text=""):
    print(text, "I'm working...")

schedule.every().seconds.do(job, "每秒一次")
schedule.every(5).seconds.do(job, "五秒一次")
schedule.every(10).minutes.do(job, "10分钟一次")
schedule.every().hour.do(job, "1小时一次")
# 每天10:30执行
schedule.every().day.at("10:30").do(job)
# 每隔5到10天执行一次任务 
schedule.every(5).to(10).days.do(job)
# 每周一的这个时候执行一次任务
schedule.every().monday.do(job)
# 每周三13:15执行一次任务
schedule.every().wednesday.at("13:15").do(job)

while True:
	# run_pending:运行所有可以运行的任务
    schedule.run_pending()
    time.sleep(1)

4. 使用time,schedule 模块 (执行多个任务)

时间有冲突的执行多个任务

代码实现:

# -*- coding:utf-8 -*-
import schedule
import time
def job():
    print("I'm working... in job1  start")
    time.sleep(5)
    print("I'm working... in job1  end")

def job2():
    print("I'm working... in job2")

schedule.every(3).seconds.do(job)
schedule.every(3).seconds.do(job2)
while True:
    schedule.run_pending()
    time.sleep(1)

运行结果:

在这里插入图片描述

根据代码运行结果可以看出,schedule方法是串行的,代码中有时间冲突,所以执行完第一个任务,才会执行第二个任务,即任务二每隔3秒执行一次,而任务一执行时间是5秒。

如果不用多线程,则定时任务会不准确,因为任务会按照顺序执行,如果上一个任务比较耗时,则下一个任务就会"延误"

多线程并发运行多个任务

代码实现:

# -*- coding:utf-8 -*-
import datetime
import schedule
import threading
import time

def job1():
    print("I'm working for job1 start", datetime.datetime.now())
    time.sleep(5)
    print("job1: end", datetime.datetime.now())

def job2():
    print("I'm working for job2 start", datetime.datetime.now())
    time.sleep(3)
    print("job2: end", datetime.datetime.now())

def job1_task():
    threading.Thread(target=job1).start()

def job2_task():
    threading.Thread(target=job2).start()

def run():
    schedule.every(3).seconds.do(job1_task)
    schedule.every(3).seconds.do(job2_task)

    while True:
        schedule.run_pending()
        time.sleep(1)
if __name__ == '__main__':
    run()

代码运行结果:

在这里插入图片描述

5. 使用apscheduler 模块

apscheduler 模块详情介绍

apscheduler 模块详情介绍

代码实现

# -*- coding:utf-8 -*-
import time
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler

def my_job(text="默认值"):
    print(text, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

sched = BlockingScheduler()
sched.add_job(my_job, 'interval', seconds=3, args=['3秒定时'])
# 2018-3-17 00:00:00 执行一次,args传递一个text参数
sched.add_job(my_job, 'date', run_date=datetime.date(2019, 10, 17), args=['根据年月日定时执行'])
# 2018-3-17 13:46:00 执行一次,args传递一个text参数
sched.add_job(my_job, 'date', run_date=datetime.datetime(2019, 10, 17, 14, 10, 0), args=['根据年月日时分秒定时执行'])
# sched.start()
"""
interval 间隔调度,参数如下:
    weeks (int) – 间隔几周
    days (int) – 间隔几天
    hours (int) – 间隔几小时
    minutes (int) – 间隔几分钟
    seconds (int) – 间隔多少秒
    start_date (datetime|str) – 开始日期
    end_date (datetime|str) – 结束日期
    timezone (datetime.tzinfo|str) – 时区
"""
"""
cron参数如下:
    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) – 指定时区
"""
# my_job将会在6,7,8,11,12月的第3个周五的1,2,3点运行
sched.add_job(my_job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')
# 截止到2018-12-30 00:00:00,每周一到周五早上五点半运行job_function
sched.add_job(my_job, 'cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2018-12-31')

# 表示2017年3月22日17时19分07秒执行该程序
sched.add_job(my_job, 'cron', year=2017, month=3, day=22, hour=17, minute=19, second=7)

# 表示任务在6,7,8,11,12月份的第三个星期五的00:00,01:00,02:00,03:00 执行该程序
sched.add_job(my_job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')

# 表示从星期一到星期五5:30(AM)直到2014-05-30 00:00:00
sched.add_job(my_job, 'cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2014-05-30')

# 表示每5秒执行该程序一次,相当于interval 间隔调度中seconds = 5
sched.add_job(my_job, 'cron', second='*/5', args=['5秒定时'])
sched.start()

到此这篇关于Python实现定时器的5种方法的文章就介绍到这了,更多相关python 定时器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python实现定时器的5种方法

本文链接: https://www.lsjlt.com/news/198553.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python实现定时器的5种方法
    目录1. 使用time,threading 模块2. 使用datetime,threading 模块3. 使用time,schedule 模块 (执行单个任务)4. 使用time,s...
    99+
    2023-03-06
    python 定时器
  • Java实现定时器的4种方法
    Java实现定时器的4种方法:1. 使用Timer类:Timer类是Java提供的一个定时器工具类,可以用它创建计划任务,可以一次性...
    99+
    2023-08-08
    Java
  • python 实现定时任务的四种方式
    目录用Python实现定时任务 用Python实现定时任务的四种方法 利用while True: + sleep()实现定时任务 利用threading.Timer定时器实现定时任务...
    99+
    2024-04-02
  • Python 4种实现定时任务的方案
    目录1.利用 while True: + sleep() 实现定时任务2.使用 Timeloop 库运行定时任务3.利用 threading.Timer 实现定时任务4.利用内置模块...
    99+
    2024-04-02
  • Java 实现定时任务的三种方法
    目录1、 sleep 2、Timer 3、ScheduledExecutorService 总结 是的,不用任何框架,用我们朴素的 Java 编程语言就能实现定时任务。 今天,栈长就...
    99+
    2024-04-02
  • Java 定时器的多种实现方式
    目录一、前言 (1)Timer (2)DelayedQueue 延迟队列 (3)ScheduledThreadPoolExecutor (4)ScheduledThreadPoolE...
    99+
    2024-04-02
  • 通过Python实现电脑定时关机的两种方法
    目录导语一、普通人关机二、程序员关机1)Pyqt5界面化小程序​2)Tkinter界面化小程序导语 无论家用电脑还是公司的电脑,定时开关机都是一个非常实用的功能,只是一般都不太受关注...
    99+
    2024-04-02
  • python实现定时器的方法有哪些
    本篇内容介绍了“python实现定时器的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 使用time,threading 模块...
    99+
    2023-07-05
  • Python保留指定位数的小数【5种方法】
    1 %.2f’ %[变量] 【四舍五入】 可以在print()打印处使用,也可以赋值给新的变量进行输出 # 四舍五入方法a = 2.345566print('%.4f'% a)# 2.3456prin...
    99+
    2023-08-31
    python 开发语言
  • js实现0ms延时定时器的几种方式
    目录queueMicrotask async/await MessageChannel 最后 附录 这两天看到一篇介绍《如何实现准时的 setTimeout?》的文章,文章起源于一道...
    99+
    2024-04-02
  • Python实现定时任务的八种方案详解
    目录利用while True: + sleep()实现定时任务使用Timeloop库运行定时任务利用threading.Timer实现定时任务利用内置模块sched实现定时任务利用调...
    99+
    2024-04-02
  • python实现定时任务的8种方式详解
            在日常工作中,常常会用到需要周期性执行的任务,一种方式是采用 Linux 系统自带的 crond 结合命令行实现。另外一种方式是直接使用Python。                 当每隔一段时间就要执行一段程序,或者往复...
    99+
    2023-09-09
    python 定时任务
  • [java] Map循环遍历的5种方法实现
    [java] Map循环遍历的5种方法实现 文章目录 一、方法一(推荐)二、方法二(推荐)三、方法三四、方法四五、方法五总结 一、方法一(推荐) 推荐使用此方法效率比较高 Map...
    99+
    2023-10-09
    java
  • Java项目实现定时任务的三种方法
    目录1 使用java.util.Timer2 使用ScheduledExecutorService3 使用Spring Task总结 1 使用java.util.Timer...
    99+
    2024-04-02
  • Java定时器实现的方式有哪几种
    Java中实现定时器的方式有以下几种:1. 使用Timer类:Timer类是Java提供的一个定时任务调度器。可以使用Timer类来...
    99+
    2023-10-12
    Java
  • python列表去重的5种常见方法实例
    目录前言一、使用for循环实现列表去重二、使用列表推导式去重三、使用集合转换函数set()实现列表去重四、使用新建字典方式实现列表去重五、删除列表中存在重复的数据附:Python 二...
    99+
    2024-04-02
  • python中tkinter实现定时关机的方法
    这篇文章给大家分享的是有关python中tkinter实现定时关机的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不...
    99+
    2023-06-14
  • Java实现定时任务最简单的3种方法
    目录一、Timer二、ScheduledExecutorService三、Spring Task1、开启定时任务2、添加定时任务Cron 表达式知识扩展:分布式定时任务1、ZSet ...
    99+
    2024-04-02
  • Java 定时任务-最简单的3种实现方法
     一、Timer Timer是JAVA自带的定时任务类,实现如下: public class MyTimerTask {     public static void main(String[] args) {         ...
    99+
    2023-09-02
    java Java 定时任务 Spring 定时任务 java 定时任务 spring 定时任务
  • Python实现实时显示进度条的6种方法
    目录第1种:普通进度条第2种:带时间的普通进度条第3种:tqdm库第4种: alive_progress库第5种:PySimpleGUI库第6种:progressbar库相信大家对进...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作