Python定时任务框架:APScheduler源码剖析(一)

本文深入剖析Python定时任务框架APScheduler,重点探讨BackgroundScheduler的内部机制和add_job方法的工作原理。讲解了Job、JobStores、Executors、Trigger和Scheduler等核心概念,并通过官方示例代码解析了BackgroundScheduler的启动、停止流程以及add_job的触发器设置。
摘要由CSDN通过智能技术生成

前言

APScheduler是Python中知名的定时任务框架,可以很方面的满足定时执行或周期性执行程序任务等需求,类似于Linux上的crontab,但比crontab要更加强大,该框架不仅可以添加、删除定时任务,还提供多种持久化任务的功能。

APScheduler弱分布式的框架,因为每个任务对象都存储在当前节点中,只能通过人肉的形式实现分布式,如利用Redis来做。

第一次接触APScheduler会发它有很多概念,我当年第一次接触时就是因为概念太多,直接用crontab多舒服,但现在公司项目很多都基于APScheduler实现,所以来简单扒一扒的它的源码。

前置概念

用最简单的语言提一下APScheduler中的关键概念。

  • Job:任务对象,就是你要执行的任务
  • JobStores:任务存储方式,默认是存储在内存中,还可以支持redis、mongodb等
  • Executors:执行器,就是执行任务的东西
  • Trigger:触发器,到达某个条件触发相应的调用逻辑
  • Scheduler:调度器,将上面几个部分连接起来的东西

APScheduler提供多个Scheduler,不同Scheduler适用于不同的情景,目前我最常见的就是BackgroundScheduler后台调度器,该调度器适合要求在后台运行程序的调度。

还有多种其他调度器:

BlockingScheduler:适合于只在进程中运行单个任务的情况,通常在调度器是你唯一要运行的东西时使用。

AsyncIOScheduler:适合于使用 asyncio 框架的情况

GeventScheduler: 适合于使用 gevent 框架的情况

TornadoScheduler: 适合于使用 Tornado 框架的应用

TwistedScheduler: 适合使用 Twisted 框架的应用

QtScheduler: 适合使用 QT 的情况

本文只剖析 BackgroundScheduler 相关的逻辑,先简单看看官方example,然后以此为入口逐层剖析。

剖析BackgroundScheduler

官方example代码如下。

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

def tick():
    print('Tick! The time is: %s' % datetime.now())

if __name__ == '__main__':
    scheduler = BackgroundScheduler()
    scheduler.add_job(tick, 'interval', seconds=3) # 添加一个任务,3秒后运行
    scheduler.start()
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))

    try:
        # 这是在这里模拟应用程序活动(使主线程保持活动状态)。
        while Tr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值