APScheduler简介

APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。基于这些功能,我们可以很方便的实现一个python定时任务系统。

组成部分

APScheduler有四种组成部分:

触发器(trigger)包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了他们自己初始配置意外,触发器完全是无状态的。

作业存储(jobstore)存储被调度的作业,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。一个作业的数据讲在保存在持久化作业存储时被序列化,并在加载时被反序列化。调度器不能分享同一个作业存储。

执行器(executor)处理作业的运行,他们通常通过在作业中提交制定的可调用对象到一个线程或者进城池来进行。当作业完成时,执行器将会通知调度器。

调度器(scheduler)是其他的组成部分。你通常在应用只有一个调度器,应用的开发者通常不会直接处理作业存储、调度器和触发器,相反,调度器提供了处理这些的合适的接口。配置作业存储和执行器可以在调度器中完成,例如添加、修改和移除作业。

调度器

APScheduler提供了多种调度器,可以根据具体需求来选择合适的调度器,常用的调度器有:

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

BackgroundScheduler: 适合于要求任何在程序后台运行的情况,当希望调度器在应用后台执行时使用。

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

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

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

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

QtScheduler: 适合使用QT的情况

安装

普通使用安装

pip install apscheduler

结合flask使用安装

pip install Flask-APScheduler

add_job参数详解

id

id代表该job唯一标识,不可重复,之后可以用id查找job

trigger

它管理着作业的调度方式。它可以为date, interval或者cron。对于不同的trigger,对应的参数也不同。

interval 间隔时间(每隔一段时间执行)

后面可以写的参数:

weeks (int) – number of weeks to wait
days (int) – number of days to wait
hours (int) – number of hours to wait
minutes (int) – number of minutes to wait
seconds (int) – number of seconds to wait
start_date (datetime|str) – starting point for the interval
calculation
end_date (datetime|str) – latest possible date/time to trigger on
timezone (datetime.tzinfo|str) – time zone to use for the date/time
calculations

date 定时调度(只执行一次)

run_date (datetime|str) – the date/time to run the job at -(任务开始的时间)

timezone (datetime.tzinfo|str) – time zone for run_date if it doesn’t have one already

# The job will be executed on November 6th, 2009
sched.add_job(func=work1, trigger='date', run_date=date(2009, 11, 6), args=['text'])
# The job will be executed on November 6th, 2009 at 16:30:05
sched.add_job(func=work1, trigger='date', run_date=datetime(2009, 11, 6, 16, 30, 5), args=['text'])

cron定时调度(某一定时时刻执行)

后面参数和interval大致相同

# 表示2017年3月22日17时19分07秒执行该程序
sched.add_job(work1, 'cron', year=2017, month=3, day=22, hour=17, minute=19, second=7)
# 表示任务在6,7,8,11,12月份的第三个星期五的00:00,01:00,02:00,03:00 执行该程序
sched.add_job(work1, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')
# 表示从星期一到星期五5:30(AM)直到2014-05-30 00:00:00
sched.add_job(work1, 'cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2014-05-30')
# 表示每5秒执行该程序一次,相当于interval 间隔调度中seconds = 5
sched.add_job(work1, 'cron', second='*/5')

args 参数,要可迭代对象

job的其他操作

# 移除所有,移除要放在start之前才有效
sched.remove_all_jobs()
# 根据id移除job
sched.remove_job('my_work1')
sched.pause_job('my_work1') # 暂停
sched.resume_job('my_work1') # 恢复
sched.get_job('my_work1') # 获取
sched.get_jobs() # 获取所有job列表
# 默认情况是调度器等所有job完成后关闭,设为False时直接关闭
sched.shutdown(wait=False)

结合flask使用

用uwsgi启动项目

(venv) [root@hmy assets-service]# cd /app/flask_project/api/app/common/apschedulerjob.py
#!/usr/bin/env python
# -*- coding: utf8 -*- from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
import config, time, requests def task():
return def update_timer(x):
print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), x) scheduler = BlockingScheduler() # scheduler.add_job(func=update_timer, args=('定时任务',), trigger='cron', hour='*/12')
# scheduler.add_job(func=update_timer, 'cron',hour=0, minute=0,second=1)
# scheduler.add_job(func=update_timer, args=('定时任务',), trigger='cron', second='*/5')
# scheduler.add_job(func=update_timer, args=('一次性任务',), next_run_time=datetime.now() + timedelta(seconds=12))
# scheduler.add_job(func=update_timer, args=('循环任务',), trigger='interval', seconds=5)
# scheduler.add_job(func=update_timer, args=('循环任务',), trigger='interval', minutes=1)
scheduler.start() ## 下面这句加在定时任务模块的末尾...判断是否运行在uwsgi模式下, 然后阻塞mule主线程(猜测).
try:
import uwsgi
while True:
sig = uwsgi.signal_wait()
except Exception as err:
pass

用gunicorn+gevent启动flask项目

(venv) [root@hmy assets-service]# cd /app/flask_project/api/app/common/apschedulerjob.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
from apscheduler.schedulers.background import BackgroundScheduler
from pyfsops.tools import Tools
import nacos, config
from app import logger tools = Tools() def nacos_healthy():
SERVER_ADDRESSES = ','.join(config.NACOS_INFO['address'])
user = config.NACOS_INFO['user']
password = config.NACOS_INFO['password']
NAMESPACE = "public" # 名称空间-命名空间
client = nacos.NacosClient(SERVER_ADDRESSES, namespace=NAMESPACE, username=user, password=password)
instance_ip = tools.get_localhost_ip()
rs = client.add_naming_instance(service_name="test-service", ip=instance_ip, port=18082,
cluster_name="DEFAULT")
(venv) [root@hmy test-service]# cd /app/flask_project/api/app/manage.py
from app import create_app
from flask_apscheduler import APScheduler
from app.common.apschedulerjob import nacos_healthy # 创建app
app = create_app() scheduler = APScheduler()
scheduler.init_app(app) scheduler.add_job(func=nacos_healthy, trigger='interval', seconds=15, id="test-service") scheduler.start() if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True, port=18082)

flask+APScheduler定时任务的使用的更多相关文章

  1. Flask+APScheduler定时任务

    1.安装依赖 pip install flask_apscheduler 2.使用定时任务 ```python from flask import Flask from flask_apschedul ...

  2. flask+apscheduler+redis实现定时任务持久化

    在我们开发flask的时候,我们会结合apscheduler实现定时任务,我们部署到服务器上,会不会遇到这样的问题,每次我们部署后,我们重启服务后,原来的定时任务都需要重启,这样对我们经常迭代的项目肯 ...

  3. APScheduler定时任务

    python模块(APScheduler定时任务)   APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时 ...

  4. apscheduler(定时任务) 基于redis持久化配置操作

    apscheduler(定时任务) 基于redis持久化配置操作 安装模块 pip install apscheduler 导入模块配置 ## 配置redis模块 from apscheduler.j ...

  5. flask+APScheduler 任务调度,计划任务,定时任务

    from flask import Flask from flask_apscheduler import APScheduler # 引入APScheduler from test124 impor ...

  6. flask 之定时任务开发

    最近开发我的接口测试平台 ,但是遇到了一个需求,需要开发定时任务,于是百度搜索,找到了这么一个叫 pFlask-APScheduler然后开始了我的第一次的学习,于是乎, 需求是这么的: 1.添加定时 ...

  7. Tornado集成Apscheduler定时任务

    熟悉Python的人可能都知道,Apscheduler是python里面一款非常优秀的任务调度框架,这个框架是从鼎鼎大名的Quartz移植而来. 之前有用过Flask版本的Apscheduler做定时 ...

  8. apscheduler -定时任务

    https://apscheduler.readthedocs.io/en/latest/userguide.html 简单的使用方式为: from apscheduler.schedulers.bl ...

  9. APScheduler定时任务框架

    1.简介 APScheduler是一个Python**定时任务框架**,提供了**基于日期**.**固定时间间隔**以及**crontab**类型的任务,并且可以**持久化任务**.基于这些功能,我们 ...

  10. APScheduler——定时任务框架

    https://www.cnblogs.com/luxiaojun/p/6567132.html

随机推荐

  1. Python开发工具:VSCode+插件

    本篇是 Python 系列教程第 3 篇,更多内容敬请访问我的 Python 合集 Visual Studio Code的安装非常简单,就不放这里增加文章篇幅了. 相比PyCharm,VSCode更加 ...

  2. 【测试平台开发】——04Flask后端api开发实战(一)

    一.测试平台开发模式 要开发一套平台有两种开发模式,一个[大而全],一个[小而简]. 说道[大而全]想到目前大型项目都使用的语言[JAVA],[小而简]想到的是[Python]语言. 重武器(大而全) ...

  3. JSP中的JSTL 标签库

    目录 JSTL 标签库 JSTL 标签库的使用步骤 core 核心库使用 <c:set /> (使用很少) <c:if /> <c:choose><c:whe ...

  4. Coursera self-driving2, State Estimation and Localization Week2, kalman filter 卡尔曼滤波

    KF - Kalman Filter: EKF - Extended Kalman Filter: ES-EKF - Error State Extended Kalman Filter 和EKF一样 ...

  5. pyspark 数据类型及转换

    spark 有哪些数据类型 https://spark.apache.org/docs/latest/sql-reference.html Spark 数据类型 Data Types Spark SQ ...

  6. 6.24Win&linux&分析后门 勒索病毒分析

    操作系统应急响应 1.常见危害 暴力破解.漏洞利用.流量攻击(危害不确定) 木马控制(Webshell.PC木马等),病毒感染(挖矿.蠕虫.勒索等) 2.常见分析 计算机用户.端口.进程.启动项.计划 ...

  7. openStack-train 1-搭建部署

    openStack-train 搭建部署 当面对KVM集群的时候,我们对KVM的管理以及宿主机的管理就会遇到很大的难度,例如: 查看每一个宿主机有多少台KVM虚拟机? 查看每一个宿主机资源信息,每一个 ...

  8. 数据结构 - 关键路径(AOE)

    数据结构 - 关键路径求解

  9. RxJS 系列 – Error Handling Operators

    前言 前几篇介绍过了 Creation Operators Filter Operators Join Creation Operators 这篇继续介绍 Error Handling Operato ...

  10. c# 8.0

    1. nullable string 从前 string 一定是 nullable. 现在则不一定 string? name = null;  要加 ? 才可以表示 nullable 限制泛型不能 n ...