python time模块定时器由浅入深应用实例

 更新时间:2024年01月22日 09:10:49   作者:傻子的尴尬 IT智慧谷  
Python提供了多种实现定时任务的方法,从简单到复杂,包括使用标准库time模块的基础定时,threading或asyncio模块的多线程/异步定时,以及第三方库如APScheduler的高级定时任务调度

引言

在Python中,定时器是一个非常实用的功能,它可以帮助我们在特定时间后执行某段代码。这在许多应用场景中都极为重要,例如数据抓取的定时任务、定期发送邮件提醒、系统监控等。

下面将逐步介绍几种Python定时器的实现方式及其应用场景。

1. 简单定时器(time.sleep())

import time
def simple_timer():
    print("开始计时...")
    time.sleep(5)  # 暂停5秒
    print("5秒钟已过...")
simple_timer()

2. 基于threading模块的定时器

import threading
import time
def timer_function(name):
    def function():
        print(f"{name} 定时器启动,等待3秒...")
        time.sleep(3)
        print(f"{name} 定时器结束.")
    return function
# 创建并启动定时器
timer1 = threading.Timer(0, timer_function("Timer1"))
timer2 = threading.Timer(2, timer_function("Timer2"))
timer1.start()
timer2.start()
# 主线程等待所有定时器结束
while threading.active_count() > 1:
    time.sleep(1)

3. 使用asyncio模块实现异步定时器

import asyncio
async def timer coroutine(seconds):
    print(f"开始计时,等待{seconds}秒...")
    await asyncio.sleep(seconds)
    print(f"{seconds}秒钟已过...")
async def main():
    task1 = asyncio.create_task(timer_coroutine(3))
    task2 = asyncio.create_task(timer_coroutine(5))
    await task1
    await task2
asyncio.run(main())

4. 高级定时任务调度库APScheduler

from apscheduler.schedulers.blocking import BlockingScheduler
def job():
    print("定时任务触发:现在是 %s" % datetime.now())
scheduler = BlockingScheduler()
scheduler.add_job(job, 'interval', minutes=1)
scheduler.start()

5. 使用schedule第三方库(简单易用,适合定时任务调度)

import schedule
import time
def job():
    print("定时任务触发:现在是 %s" % datetime.now())
# 每天凌晨3点执行job函数
schedule.every().day.at("03:00").do(job)
while True:
    schedule.run_pending()
    time.sleep(1)

6. 使用concurrent.futures模块结合threading.Timer实现多线程定时任务管理

import concurrent.futures
import threading
import time
def timer_function(name, seconds):
    def function():
        print(f"{name} 定时器启动,等待{seconds}秒...")
        time.sleep(seconds)
        print(f"{name} 定时器结束.")
    return function
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    future1 = executor.submit(threading.Timer(0, timer_function("Timer1", 3)).start)
    future2 = executor.submit(threading.Timer(2, timer_function("Timer2", 5)).start)
    concurrent.futures.wait([future1, future2])

总结   

以上就是从简单到复杂的Python定时器实现方式及其应用场景。根据实际需求和项目规模,你可以选择适合自己的定时器方案。简单的定时可以通过time.sleep()完成,对于更复杂的定时任务,可以利用Python的多线程或多进程能力,或者利用异步IO来提高程序效率。而当需要进行复杂的定时任务调度时,诸如APScheduler这样的第三方库则能提供强大且灵活的解决方案。

以上就是python time模块定时器由浅入深应用实例的详细内容,更多关于python time定时器模块的资料请关注脚本之家其它相关文章!

相关文章

  • python实现由数组生成对称矩阵

    python实现由数组生成对称矩阵

    本文给大家分享的是由数组生成对称矩阵的思路并附上了使用Python实现的代码,希望大家能够喜欢
    2021-05-05
  • python 遍历目录(包括子目录)下所有文件的实例

    python 遍历目录(包括子目录)下所有文件的实例

    今天小编就为大家分享一篇python 遍历目录(包括子目录)下所有文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python requests库的使用

    python requests库的使用

    这篇文章主要介绍了python requests库的使用,帮助大家更好的利用python进行爬虫,感兴趣的朋友可以了解下
    2021-01-01
  • 详解Python中的Cookie模块使用

    详解Python中的Cookie模块使用

    这篇文章主要介绍了详解Python中的Cookie模块使用,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-07-07
  • 新手学习Python2和Python3中print不同的用法

    新手学习Python2和Python3中print不同的用法

    在本篇文章里小编给大家分享的是关于Python2和Python3中print不同的用法,有兴趣的朋友们可以学习下。
    2020-06-06
  • 利用pyecharts绘制地理散点图

    利用pyecharts绘制地理散点图

    这篇文章主要介绍了利用pyecharts绘制地理散点图,文章利用上海市7000+办公楼项目,包括项目名称,地理位置,每天的租金,建筑面积和项目所在的商圈,现在要让这些项目按经纬度落位到地图上去,需要的朋友可以参考一下
    2022-03-03
  • Python 获取指定文件夹下的目录和文件的实现

    Python 获取指定文件夹下的目录和文件的实现

    这篇文章主要介绍了Python 获取指定文件夹下的目录和文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python图形开发GUI库wxpython使用方法详解

    python图形开发GUI库wxpython使用方法详解

    这篇文章主要介绍了python GUI库wxpython使用方法详解,需要的朋友可以参考下
    2020-02-02
  • python dataframe 输出结果整行显示的方法

    python dataframe 输出结果整行显示的方法

    今天小编就为大家分享一篇python dataframe 输出结果整行显示的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python Pandas高级教程之时间处理

    Python Pandas高级教程之时间处理

    我们发现关于时间日期的简单计算很多功能都是datetime库提供的,那么pandas有没有提供跟日期时间有关的函数,通过下面文章来了解下,这篇文章主要给大家介绍了关于Python Pandas高级教程之时间处理的相关资料,需要的朋友可以参考下
    2021-10-10

最新评论