Schedule – 人性化的Python定时任务调度库

Schedule – 人性化的Python定时任务调度库可以看到 schedule 的使用与自然语言很相似 同时代码编码规范 文档清晰 并充分利用了链式调用范式 是一个值得学习的 Python 库

大家好,欢迎来到IT知识分享网。

需求要写个定时任务,可 crontab 的语法又忘得七七八八了,能不能有一个更加人性化的定时任务调度工具呢?Python 的 schedule 库可以帮上你的忙。

Schedule - 人性化的Python定时任务调度库

定时任务调度

简介

Schedule,是 Github 上 dbader 开源的 Python 定时任务调度库,目前版本为 0.6.0,代码仓库地址为 https://github.com/dbader/schedule。受到 Adam Wiggins 的文章《Rethinking Cron》和 Ruby 的 clockwork 模块的启发,schedule 使用了一种对开发者友好的定时任务设置 API,十分人性化。Schedule 非常轻量,没有外部依赖,测试覆盖率高(可达100%),是个优秀的 Python 三方库。

Schedule - 人性化的Python定时任务调度库

Python Schedule

安装

Schedule 目前支持 Python2.7 和 Python3.5 以上,使用 pip 安装:

pip install schedule

示例

Schedule 的使用十分简单,以下是一个基本使用的例子:

import schedule import time def job(): print("I'm working...") schedule.every(10).minutes.do(job) # 每十分钟 schedule.every().hour.do(job) # 每小时 schedule.every().day.at("10:30").do(job) # 每天10:30 schedule.every(5).to(10).minutes.do(job) # 每5到10分钟(随机) schedule.every().monday.do(job) # 每周一 schedule.every().wednesday.at("13:15").do(job) # 每周三13:15 schedule.every().minute.at(":17").do(job) # 每分钟的17秒时 # 等待定时任务运行 while True: schedule.run_pending() time.sleep(1)

可以看到,schedule 的使用与自然语言(英语)很相似。

其主要使用 every 接口进行定时任务的配置,如 every(10).minutes 就是每十分钟,every().day 就是每天;另外,还使用了 at 接口进行确定时间点的设置,使用 to 接口进行随机时间间隔的配置。

在进行了定时任务关于时间间隔的定义后,利用 do 接口注册所需运行的实际任务,通常是一个函数,也可以是任意可调用的对象。do 接口也可以接受函数参数,从而实现带参数函数的调用:

def greet(name): print('Hello', name) schedule.every(2).seconds.do(greet, name='Alice') schedule.every(4).seconds.do(greet, name='Bob')

进阶

  • Schedule 主要的接口是类 Scheduler 和 Job,分别代表调度器和定时任务。当使用 every、at 等接口时,返回的是 Job 实例,定时任务的定义过程实际是一个链式调用,实现了多种设置的叠加。
  • Schedule 支持对于任务的标记,可以通过 tag 接口添加多个标签。
  • Schedule 支持对于定时任务的取消。cancel_job 接口可以取消一个 Job 实例;而 clear 接口则接受一个可选的标签参数,可以取消包含该标签的所有任务。
def greet(name): print('Hello {}'.format(name)) schedule.every().day.do(greet, 'Andrea').tag('daily-tasks', 'friend') schedule.every().hour.do(greet, 'John').tag('hourly-tasks', 'friend') schedule.every().hour.do(greet, 'Monica').tag('hourly-tasks', 'customer') schedule.every().day.do(greet, 'Derek').tag('daily-tasks', 'guest') schedule.clear('daily-tasks') # 取消所有包含标签daily-tasks的任务
  • 定时任务可以并发执行,需要使用 threading 等进行线程派生。
  • 可以使用 next_run 接口得到下一次运行的时间,idle_seconds 接口得到需要等待的时间,should_run 接口得知任务是否正在运行。

总结

Schedule 是一个对开发者友好的定时任务调度库,其 API 方便简洁,支持任务的标记和取消等,功能可以满足不同场景的需求。

Schedule 代码量不超过700行,没有额外依赖,十分轻量小巧;同时代码编码规范,文档清晰,并充分利用了链式调用范式,是一个值得学习的 Python 库。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/160984.html

(0)
上一篇 2024-12-05 22:45
下一篇 2024-12-06 07:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信