欢迎来到赛兔子家园

Python - APScheduler定时任务

APScheduler简介

APScheduler(Advanced Python Scheduler)是一个轻量级的Python定时任务调度框架(Python库)。
APScheduler有三个内置的调度系统,其中包括:

    • cron式调度(可选开始/结束时间)
    • 基于间隔的执行(以偶数间隔运行作业,也可以选择开始/结束时间)
    • 一次性延迟执行任务(在指定的日期/时间内运行作业一次)
安装&使用

APScheduler下载安装

pip install apscheduler==3.6.3  若超时时使用豆瓣源:pip install -i https://pypi.doubanio.com/simple/ apscheduler

使用

当需要调度作业时,为这个作业选择一个触发器,用来描述该作业将在何时被触发,APScheduler有3中内置的触发器类型:

  1. 新建一个调度器(scheduler)
  2. 添加一个调度任务(job store)
  3. 运行调度任务

添加作业

有两种方式可以添加一个新的作业:

  • add_job来添加作业
  • 装饰器模式添加作业

只执行一次:

import datetime
from apscheduler.schedulers.blocking import BlockingScheduler


# 定时器执行的函数
def job2(text):
    print('job2', datetime.datetime.now(), text)


# 新建一个调度器
scheduler = BlockingScheduler()
# 新建任务:2021年4月1日21点38分06秒执行一次
scheduler.add_job(job2, 'date', run_date=datetime.datetime(2021, 4, 1, 21, 38, 6), args=['text'], id='job2')
# 运行任务
scheduler.start()

只在2021年4月1日 21点38分06秒执行一次,args传递一个text参数。

间隔执行

# ------------间隔执行----------------
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler


# 触发执行函数
def job1():
    print("job1", datetime.datetime.now())


scheduler = BlockingScheduler()
# 每隔5秒执行一次
# scheduler.add_job(job1, 'interval', seconds=5, id='job1')
# 每隔2分钟执行一次,*/1:每隔1分钟执行一次
# scheduler.add_job(job1, "cron", minute="*/2", id="job1")
# 每1个小时执行一次
scheduler.add_job(job1, "interval", hours=1, id="job1")
scheduler.start()

 每天凌晨1点30分50秒执行一次

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: 青城子
# datetime: 2021/4/1 21:03 
# ide: PyCharm

from apscheduler.schedulers.blocking import BlockingScheduler  # 后台运行

sc = BlockingScheduler()
f = open('t1.txt', 'a', encoding='utf8')


# day_of_week='*'每周,hour=1 小时 minute=30分 second=50秒
# 每天凌晨1:30分50秒执行一次
@sc.scheduled_job('cron', day_of_week='*', hour=22, minute='15', second='50')
def check_db():
    print(111111111111)


if __name__ == '__main__':
    try:
        sc.start()
        f.write('定时任务成功执行')
    except Exception as e:
        sc.shutdown()
        f.write('定时任务执行失败')
    finally:
        f.close()

 

posted on 2021-10-18 10:53  赛兔子  阅读(1078)  评论(0编辑  收藏  举报

导航