Python任务调度利器之APScheduler详解

yizhihongxing

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日

相关文章

  • 网易社招面试流程与经验总结【纯干货分享】

    我们来详细讲解一下关于“网易社招面试流程与经验总结【纯干货分享】”的完整攻略。 网易社招面试流程 在介绍攻略之前,先来了解一下网易社招的面试流程。网易社招一般分为以下几个环节: 投递简历 首先,你需要在网易招聘网站投递你的简历。如果符合要求,HR 会与你电话联系安排下一步面试。 初试 初试一般为电话面试,主要考察基本的职业素养、技能水平及工作经验等情况。 复…

    database 2023年5月22日
    00
  • 详解MySQL AS:设置别名

    MySQL AS是用于给SQL查询结果列、表和子查询设置别名的关键字。AS不是必需的,但它使得查询结果更易于阅读和理解。 AS用法示例: 列别名 在SELECT语句中,使用AS关键字为查询结果列设置别名。例如: SELECT first_name AS given_name, last_name AS family_name FROM customers; …

    MySQL 2023年3月9日
    00
  • 在jsp中用bean和servlet联合实现用户注册、登录

    在JSP中使用JavaBean和Servlet联合实现用户注册、登录功能的步骤如下: 创建Servlet用于处理用户请求。 可以创建一个Servlet,用于响应用户提交的表单请求,该Servlet在获取表单数据后,使用JavaBean的对象作为数据模型objectModel,在JavaBean对象中进行数据验证和业务逻辑处理,最后将结果返回给用户。 示例代码…

    database 2023年5月22日
    00
  • Centos8安装mysql8的详细过程(免安装版/或者二进制包方式安装)

    以下是CentOS 8安装MySQL 8的详细过程。 准备工作 在开始安装之前,需要在CentOS 8上安装一些依赖项以支持MySQL 8。在终端中运行以下命令: sudo dnf install wget curl vim sudo dnf install libaio sudo dnf install numactl 这些命令将安装wget、curl和v…

    database 2023年5月22日
    00
  • 未处理 MySql.Data.MySqlClient.MySqlException Message=Incorrect string value: ‘\xE5\xBC\xA0\xE4\xB8\x8

    MySQL里的ERROR 1366(HY000):Incorrect string value问题   这个就是编码的问题,可能在装MySql的时候选择的是默认的编码,或者 选择的UTF8,所以在插入数据的时候出现编码的错误.  www.2cto.com     数据不重要的话,一劳永逸的解决办法是,使用alert database databaseName…

    MySQL 2023年4月12日
    00
  • CentOS8.4安装Redis6.2.6的详细过程

    下面是CentOS8.4安装Redis6.2.6的详细过程的攻略: 安装Redis6.2.6 打开centos的终端,使用以下命令下载对应的Redis6.2.6版本安装包 wget https://download.redis.io/releases/redis-6.2.6.tar.gz 下载完成后,使用以下命令解压Redis6.2.6版本安装包 tar -…

    database 2023年5月22日
    00
  • Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure问题解决

    一、今日学习内容 ERROR [com.alibaba.druid.pool.DruidDataSource] – create connection error, url: jdbc:mysql://127.0.0.1:3306/db_local?serverTimezone=UTC&useSSL=false&autoReconnect=t…

    MySQL 2023年4月12日
    00
  • MySql8.0 安装重要的两步。

    1.去官网下载mysql社区版 windows安装包。https://dev.mysql.com/downloads/windows/installer/8.0.html   https://dev.mysql.com/downloads/         2.在安装包 安装的过程中,有一步就是启动mysql 会失败:             然后修改服务后…

    MySQL 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部