在日常工作中,我们常常需要编写一些定时任务(比如每日发送邮件,定时爬虫等)。这时候,Python提供了很多好用的库可以帮助我们实现定时任务调度。本文将介绍Python中三个比较常用的定时任务调度库:schedule、APScheduler和Celery,让你轻松实现定时任务调度。
一、schedule库
schedule是Python中的一个轻量级的定时任务调度库。其依据调用时间来执行相应的任务,支持间隔时间、定期执行任务,可设置任务重复次数上限,同时支持秒级别的任务调度。使用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)
schedule.every().monday.do(job)
while True:
schedule.run_pending()
time.sleep(1)
以上代码会将任务job按照调度时间执行。我们可以看到,通过schedule我们可以非常简单的实现需要按照时间调度的任务。
二、APScheduler库
APScheduler是Python中的一个较为常用的基于日期和时间的任务调度库。它提供了多种调度方式,比如间隔执行、定时执行、循环执行等。其中最重要的是基于时间间隔的任务调度。我们可以使用pip安装该库:
pip install apscheduler
接着,我们可以使用以下代码调用一个简单的任务:
from apscheduler.schedulers.blocking import BlockingScheduler
def job():
print("I'am working...")
scheduler = BlockingScheduler()
scheduler.add_job(job, 'interval', seconds=5)
scheduler.start()
以上代码可以使任务job每隔5s执行一次。 BlockingScheduler是阻塞型的调度器,调度器会创建一个单独的调度线程来执行任务。因此,我们需要使用scheduler.start()来启动该调度器。
三、Celery库
Celery是一个非常流行的任务调度框架,适合于处理大量并发任务。使用Celery可以实现异步任务调度,使得任务在后台完成,而不会对用户的操作产生影响。Celery采用分布式架构,在低延迟、大并发量的场景中有很好的优化效果。下面是一个简单的示例:
from celery import Celery
app = Celery('tasks', backend='redis://localhost', broker='amqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
if __name__ == '__main__':
result = add.delay(4, 5)
print(result.wait())
以上代码使用Celery实现了一个简单的异步任务调度程序。我们可以使用delay方法来将函数调用转化为任务,该任务会放入到任务队列中。通过wait()方法,程序会等待任务执行完成后获取结果。
结语
本文介绍了三个常用的Python定时任务调度库并展示了相应的实现代码。有了这些库的帮助,我们可以轻松地实现定时任务调度,提高生产效率。当然,以上库只是定时任务调度的冰山一角,读者可以根据自身需求选择合适的库进行使用。