在工作中多少都会涉及到一些定时任务,比如定时邮件提醒等。 本文通过开源项目schedule来学习定时。
任务调度是如何工作的,以及基于此实现一个web版本的提醒工具。
schedule简介
既然schedule说是给人类使用的作业调度器, 先来看看作者给提供的例子:
import schedule
import time
def job():
print(“I’m working…”)
schedule.every(10).minutes.do(job) (每隔10分钟执行一次任务)
schedule.every().hour.do(job) (每隔一小时执行一次任务)
schedule.every().day.at(“10:30”).do(job) (每天10:30执行一次任务)
schedule.every().monday.do(job) (每周一的这个时候执行一次任务)
schedule.every().wednesday.at(“13:15”).do(job) (每周三13:15执行一次任务)
while True:
schedule.run_pending()
time.sleep(1)
代码确实简洁明了,一读就懂。 那么接下来就来学习一下源码。
一般情况下分为三个类,源码分析就围绕这三个类:
CancelJob
class CancelJob(object):
pass
可以看到就是一个空类, 这个类的作用就是当你的job执行函数返回一个CancelJob类型的对象,那么执行完后就会被Scheduler移除. 简单说就是只会执行一次.
Scheduler
为了使代码紧凑,这里删除了注释,剩下也就34行代码.
class Scheduler(object):
def init(self):
self.jobs = []
def run_pending(self):
runnable_jobs = (job for job in self.jobs if job.should_run)
for job in sorted(runnable_jobs):
self._run_job(job)
def run_all(self, delay_seconds=0):
for job in self.jobs:
self._run_job(job)
time.sleep(delay_seconds)
def clear(self):
del self.jobs[:]
def cancel_job(self, job):
try:
self.jobs.remove(job)
except ValueError:
pass
def every(self, interval=1):
job =