Python任务调度利器之APScheduler详解

Python任务调度利器之APScheduler详解

简介

APScheduler(Advanced Python Scheduler)是一个轻量级的Python任务调度库,它允许您按照指定的时间间隔或cron-like表达式调度任务执行。APScheduler是使用纯Python编写的,因此非常易于安装和使用,同时具有足够的灵活性,支持多种调度器,可以与许多后端存储系统一起使用,例如SQLAlchemy、MongoDB等。

基本使用

安装

在命令行使用pip安装APScheduler:

pip install apscheduler

简单使用

from apscheduler.schedulers.blocking import BlockingScheduler

def job():
    print('I am doing my job.')

scheduler = BlockingScheduler()
scheduler.add_job(job, 'interval', seconds=5)
scheduler.start()

上述代码会每5秒钟执行一次job函数。

调度选项

Interval调度器

interval调度器允许您按指定的秒数或分钟数执行作业。示例代码如下:

scheduler.add_job(job, 'interval', seconds=5)

上述代码会每5秒钟执行一次job函数。

Cron调度器

Cron调度器是一种cron类似的作业调度器,它允许您按日期和时间执行作业。下面是cron调度器的一些示例:

# 每天的下午4点30分执行
scheduler.add_job(job, 'cron', hour=16, minute=30)

# 每月的第一天的下午4点执行
scheduler.add_job(job, 'cron', day=1, hour=16)

# 每周一的下午4点执行
scheduler.add_job(job, 'cron', day_of_week='mon', hour=16)

One-time调度器

如果您只想一次性执行作业,可以使用one-time调度器。示例代码如下:

# 5秒后执行job函数
scheduler.add_job(job, 'date', run_date='2022-12-12 12:12:12')

# 将在程序第一次运行时执行job函数
scheduler.add_job(job, 'date', run_date=datetime.now())

新版添加任务方式

新版中,使用以下方式添加任务:

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore

jobstore = {
   'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}

scheduler = BackgroundScheduler(jobstores=jobstore)
scheduler.add_job(job, 'interval', seconds=5)

在该示例中,我们使用了SQLAlchemyJobStore,并将其命名为“default”。我们还创建了一个BackgroundScheduler对象,将”default"作业存储器传递给它。最后,我们按照每5秒钟执行我作业。

示例说明

示例1:使用APScheduler构建简单的邮件发送任务

任务执行时间:每天的早上8点钟

from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
import smtplib
from email.mime.text import MIMEText

def send_email():
    msg = MIMEText('这是一份由APScheduler发送的测试邮件')
    msg['Subject'] = '测试邮件'
    msg['From'] = 'example@qq.com'
    msg['To'] = 'example@163.com'

    smtp = smtplib.SMTP('smtp.qq.com')
    smtp.login('example@qq.com', 'password')
    smtp.sendmail('example@qq.com', 'example@163.com', msg.as_string())
    smtp.quit()
    print('邮件已发送!')

scheduler = BlockingScheduler()
scheduler.add_job(send_email, 'cron', hour=8)
scheduler.start()

示例2:使用APScheduler定时查询网站数据并存储到数据库

任务执行时间:每5分钟

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

def get_data():
    resp = requests.get('https://www.example.com/get_data')
    data = resp.json()
    # 在这里将数据写入数据库中
    conn = sqlite3.connect('data.db')
    cursor = conn.cursor()
    cursor.execute('INSERT INTO data VALUES (?, ?, ?)', (datetime.now(), data['value1'], data['value2']))   
    conn.commit()
    conn.close()

jobstore = {
   'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}

scheduler = BackgroundScheduler(jobstores=jobstore)
scheduler.add_job(get_data, 'interval', minutes=5)
scheduler.start()

在该示例中,我们每隔5分钟查询一个HTTPS网站的数据,并将其存储在SQLite数据库中。此外,也展示了使用SQLAlchemyJobStore的方式,存储任务到数据库中,以便于管理多个任务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python任务调度利器之APScheduler详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 聚生网管电脑流量监控限制软件、企业上网行为管理软件白皮书

    聚生网管电脑流量监控限制软件、企业上网行为管理软件白皮书: 攻略 什么是聚生网管电脑流量监控限制软件、企业上网行为管理软件白皮书? 聚生网管电脑流量监控限制软件、企业上网行为管理软件白皮书是一份介绍聚生网管电脑流量监控限制软件和企业上网行为管理软件的白皮书。这份白皮书介绍了该软件的功能特点、使用场景、优势和部署方法,并提供了相关案例。该白皮书旨在帮助企业和机…

    database 2023年5月21日
    00
  • 实战 J2EE 开发购物网站 – 创建数据库

    实战 J2EE 开发购物网站 – 创建数据库 在开始开发购物网站之前,我们需要先创建数据库。本节将为大家介绍如何使用 MySQL 数据库创建购物网站所需的表格。 1. 安装 MySQL 数据库 首先需要安装 MySQL 数据库。如果你已经安装好了 MySQL 数据库,则可以跳过这一步。 如果你还没有安装 MySQL 数据库,可以前往 MySQL 官网(htt…

    database 2023年5月21日
    00
  • linux下使用cmake编译安装mysql的详细教程

    以下是“linux下使用cmake编译安装mysql的详细教程”的完整攻略。 安装依赖项 在编译过程之前,请先确保您的系统上已经安装了以下依赖项: sudo apt-get install build-essential cmake libncurses5-dev libssl-dev libboost-dev 下载源码 从MySQL 官网上下载源码,将其解…

    database 2023年5月22日
    00
  • mysql中合并两个字段的方法分享

    以下是关于“mysql中合并两个字段的方法分享”的完整攻略: 标题 Headers 在Markdown中,标题可以用 “#” 开头表示,“#” 的个数表示标题的层级,最多可以有六级标题。为了讲解清晰,这里使用二级标题表示攻略的概述。示例代码如下: ## mysql中合并两个字段的方法分享 前言 Preface 在正式讲解之前,需要先解释一下为什么有时候需要合…

    database 2023年5月22日
    00
  • python 如何用urllib与服务端交互(发送和接收数据)

    Python中的urllib库提供了许多用于与服务端进行HTTP或HTTPS通信的方法,包括发送和接收数据。下面是Python如何用urllib与服务端交互(发送和接收数据)完整攻略: 1. 发送数据: POST方法: 使用urllib.request.urlopen()函数发送HTTP POST请求,将数据作为请求体发送。数据通常以字符串或字节的形式提供,…

    database 2023年5月21日
    00
  • MS SQL Server数据库清理错误日志的方法

    我来为你详细讲解如何清理MS SQL Server数据库的错误日志。 1. 概述 MS SQL Server 数据库的错误日志文件默认会保存一定数量的日志信息,这会占据大量的磁盘空间。因此,对于长时间运行的MS SQL Server数据库,我们需要清理这些错误日志文件以释放磁盘空间。在清理错误日志文件时,需要注意一些细节问题,下面我会详细讲解相关方法和注意事…

    database 2023年5月18日
    00
  • Springboot集成Jasypt实现配置文件加密的方法

    下面是Spring Boot集成Jasypt实现配置文件加密的方法的完整攻略。 什么是Jasypt? Jasypt是一个开源的Java加密/解密库,可以手动或自动加密文本、属性和配置文件。Jasypt的目标是为Java开发人员提供简单易用、强大高效的数据加密工具。 集成Jasypt实现配置文件加密的方法 1. 添加Jasypt依赖 在Spring Boot项…

    database 2023年5月22日
    00
  • 制作PHP的RPM包详解及实例

    制作PHP的RPM包详解及实例 简介 在Linux系统中,RPM(RedHat Package Manager)是一种常用的软件包管理器。在CentOS等常用的Linux发行版中,我们可以使用RPM来安装和管理软件包。对于Web开发来说,PHP是一个非常常用的开发语言,因此制作PHP的RPM包对于服务器管理员来说是非常有必要的。本文将对制作PHP的RPM包进…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部