python之任务调度(APScheduler和schedule)

一、APScheduler

官方文档

https://apscheduler.readthedocs.io/en/3.x/

APScheduler是一个Python的任务调度库,允许你根据时间间隔、特定日期时间、甚至是依赖于数据触发的事件来调度任务。它支持多种方式来配置和调度任务,包括定时任务、循环任务、日期时间任务等。

1、安装 APScheduler

pip install apscheduler

2、基本概念

  • Scheduler: 用于管理所有的作业。
  • Job Store: 负责保存作业状态和信息的地方。
  • Triggers: 触发器定义了当作业何时执行的逻辑。
  • Executors: 用于作为作业运行的环境。

3、创建调度器

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()
scheduler.start()

4、创建任务

定义一个简单的任务函数,然后使用 scheduler.add_job() 来添加任务到调度器。

def my_job():
    print("Hello APScheduler!")

scheduler.add_job(my_job, 'interval', seconds=10)  # 每隔10秒执行一次任务

5、停止调度器

scheduler.shutdown()

6、案例

from apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime

def print_time():
    print(f"Current time: {datetime.now()}")

# 创建调度器
scheduler = BackgroundScheduler()
scheduler.start()

# 添加任务到调度器,每隔5秒执行一次 print_time 函数
scheduler.add_job(print_time, 'interval', seconds=5)

# 程序运行10秒后停止调度器
scheduler.shutdown(wait=False)

二、scheduler

1、安装

pip install scheduler

2、设置任务的执行时间间隔的方式

当使用scheduler库时,schedule.every()是一个非常有用的方法,它可以让你设置任务的执行时间间隔。下面是一些schedule.every()的更多用法:

  • schedule.every().day.at("10:30").do(job):在每天的10:30执行任务。
  • schedule.every(10).minutes.do(job):每隔10分钟执行任务。
  • schedule.every().hour.do(job):每隔一个小时执行任务。
  • schedule.every(2).hours.do(job):每隔两个小时执行任务。
  • schedule.every().monday.do(job):每周一执行任务。
  • schedule.every().wednesday.at("13:15").do(job):每周三的13:15执行任务。

3、案例

if __name__ == "__main__":
    now = datetime.datetime.now()
    if 10 < now.minute <= 20:
        time.sleep(300)

    schedule.clear()

    if SCHEDULE_THREAD_STATUS:
        logger.info("Enable check_process_and_thread schedule task")
        schedule.every().day.at('18:40').do(do_work, check_thread_num)

    while True:
        schedule.run_pending()
        time.sleep(5)

三、flask-apscheduler

Flask-APScheduler是基于APScheduler库开发的Flask拓展库。

APScheduler的全称是Advanced Python Scheduler。允许您将Python代码安排为稍后执行,可以只执行一次,也可以定期执行。可以随时添加新作业或删除旧作业。

如果将作业存储在数据库中,那么调度程序重启后它们也将存活下来并保持其状态。当调度器重新启动时,它将运行它在离线时应该运行的所有作业,

1、安装

pip install flask-apscheduler

2、触发器 triggers :
触发器包含调度逻辑。每个作业都有自己的触发器,用于确定下一个任务何时运行。除了初始配置之外,触发器是完全无状态的。
有三种内建的trigger:
(1)date: 特定的时间点触发
(2)interval: 固定时间间隔触发
(3)cron: 在特定时间周期性地触发

interval 触发器

weeks (int) 间隔几周
days (int) 间隔几天
hours (int) 间隔几小时
minutes (int) 间隔几分钟
seconds (int) 间隔多少秒
start_date (datetime 或 str) 开始日期
end_date (datetime 或 str) 结束日期
timezone (datetime.tzinfo 或str) 时区

  

 

3、

四、二者的异同点

1、相同点

  两者都可用于定时执行任务,都可以设置为在特定的时间或时间间隔内执行任务。

2、不同点

  APScheduler功能更加完善且复杂,支持后台运行,任务持久化,具有多种调度方式,适合大型项目。

  而schedule更加简单并且人性化,但功能上可能不完备。

  在使用上,APScheduler的复杂性更高,需要使用调度器对象进行操作,而schedule的使用则更简洁易懂。

 

posted @ 2024-03-26 17:58  凡人半睁眼  阅读(626)  评论(0编辑  收藏  举报