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日

相关文章

  • 怎么激活RapidMiner数据挖掘软件 RapidMiner安装激活教程详解

    怎么激活RapidMiner数据挖掘软件 RapidMiner安装激活教程详解 如果你已经成功下载并安装了RapidMiner数据挖掘软件,那么激活软件是你使用该软件的下一步。以下是详细的安装激活教程。 第一步:获取RapidMiner许可证 访问RapidMiner官网(https://rapidminer.com/),单击“登录”按钮进入登录页面。 如果…

    database 2023年5月22日
    00
  • SQLite 和 MongoDB 的区别

    SQLite和MongoDB都是常见的数据库管理系统,但两者在设计、使用方式和适用场景等方面存在很大的区别,本文将详细讲解它们的区别。 一、SQLite和MongoDB的设计思想 SQLite是一种轻型的关系型数据库管理系统,以C语言库形式提供,目的是嵌入到其他应用程序中,也就是说,SQLite的设计思想是“零配置”、“无服务器”、且“文件为数据库”,主要面…

    database 2023年3月27日
    00
  • mysql常用命令行操作语句

    MySQL是一个常用的数据库管理系统,除了通过GUI图形化工具操作外,我们也可以通过命令行来进行MySQL操作,可以通过以下常用命令行操作语句来完成: 1. 登录MySQL 我们可以通过以下命令来登录MySQL,需要输入用户名和密码: mysql -u 用户名 -p 2. 创建数据库 使用以下命令创建名为database_name的数据库: create d…

    database 2023年5月22日
    00
  • centos7 安装mysql5.7(源码安装)

    Centos7将默认数据库mysql替换成了Mariadb 在接下来的mysql安装过程中,请一定保证自己当前所在目录是正确的!  e g: [root@localhost ~]# 表示当前目录为~ [root@localhost mysql]# 表示当前目录为mysql 一、安装MySQL 1、下载安装包mysql-5.7.17-linux-glibc2.…

    MySQL 2023年4月13日
    00
  • sql注入数据库原理详情介绍

    SQL注入攻击及防御 什么是SQL注入攻击 SQL注入攻击是指攻击者通过在Web应用程序中注入恶意的SQL语句串,使得攻击者可以获得他不应该获得的数据,或者绕过应用程序的身份验证并通过执行恶意SQL语句取得应用程序甚至操作系统的控制权。 SQL注入攻击原理 SQL注入攻击是通过输入恶意的SQL代码,来询问数据库返回信息,或者进行其他的恶意操作。攻击者可以在W…

    database 2023年5月18日
    00
  • 使用RestTemplate访问https实现SSL请求操作

    使用RestTemplate访问https实现SSL请求操作是非常常见的场景,本攻略将介绍如何使用RestTemplate实现这一功能。 准备工作 在进行RestTemplate访问https之前,我们需要准备以下环节:1. 证书:SSL通讯涉及到证书认证,因此我们需要将SSL证书下载至本地。可以联系网站管理员获取SSL证书。 安装SSL证书:下载完SSL证…

    database 2023年5月21日
    00
  • ASP.NET2.0 SQL Server数据库连接详解

    ASP.NET2.0 SQL Server数据库连接详解 为什么要连接SQL Server 在ASP.NET2.0应用程序中,我们通常需要连接SQL Server数据库,进行数据的存储、传递和读取。因此,了解如何连接SQL Server数据库是非常重要的。 如何连接SQL Server 1. 初始化连接字符串 在连接SQL Server之前,我们需要先初始化…

    database 2023年5月21日
    00
  • SQL server 2008 数据库优化常用脚本

    让我们来详细讲解“SQL server 2008 数据库优化常用脚本”的完整攻略。 1. 为什么需要数据库优化? 提高数据库的性能,缩短数据保存和数据检索过程的时间,是我们进行数据库优化的主要目的。在处理海量数据的过程中,数据库优化至关重要,可以让你的系统运行更加快捷、高效。 2. 数据库优化的方法 数据库物理设计优化 SQL语句优化 数据库参数优化 系统与…

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