apscheduler -定时任务
https://apscheduler.readthedocs.io/en/latest/userguide.html
简单的使用方式为:
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
sched.add_job(ff_task,'cron',hour='0-1,8-23',minute=28)
sched.add_job(avor_task, 'cron', hour='2-7', minute='0')
sched.add_job(vor_task,'cron',hour='0-1,8-23',minute='*/3')
try:
sched.start()
except (KeyboardInterrupt, SystemExit):
sched.shutdown()
apscheduler包含四个组件 :triggers触发器 , schedulers 调度器 ,job stores任务存储 , executors执行器
triggers 包含计划的逻辑,每个任务都有自己的触发器,来决定任务下次被触发的时间,除了类型的初始配置,触发器是完全无状态的
job stores 用户存储被计划的任务,默认存储在内存中,也可存储在各种数据库中。当一个任务被存储在持久化的存储库中时将被序列化,然后在加载到内存时被反序列化。
调度器之间不应该共用任务存储。
executors 用于处理任务的执行。 让预定的任务在线程或进程池中启动,当任务结束后,执行器通知调度器什么时候进行合适的事件。
scheduler用于将所有的组建凝结起来。一个应用中通常只有一个调度器
BlockingScheduler:用于当scheduler是进程里唯一运行的程序
BlockgroundScheduler:当你没有使用以下任何一个调度器,并且希望scheduler在应用的后台运行时适用
AsyncIOScheduler :当应用中使用 asyncio module(异步io模块)时适用
GeventScheduler :当应用中使用 gevent时适用
TornadoScheduler :当构建基于Tornado的应用时适用
TwistedScheduler: 当构建基于 TwistedScheduler的应用时适用
QtScheduler: 当构建 Qt 应用时适用
存储器选择
如果每次开启应用时都会重建任务计划,则可以使用默认的内存存储
如果你希望当scheduler重启或应用宕机时,任务可以继续的按计划执行 ,存储器的选择通常取决于开发环境中使用的工具。
如果你没什么要求则推荐使用SQLAlchemyJobStore,以PostgreSQL作为存储后端
执行器
通常取决于上述组建的选择,不过,通常默认的执行器 ThreadPoolExecutor也足够大多数任务了。如果任务中设计了cpu密集型操作,应该考虑ProcessPoolExecutor ,来使用多核CPU。
你甚至可以同时使用这两个执行器,将进程池执行器添加为备选执行器
触发器
trigger决定任务执行时间的逻辑。ASPcheduler内置三种触发器:
date : 一次性的固定时间点执行任务
interval: 按周期循环执行任务
cron: 语法类似linux的定时任务cron
要组合多种triggers,也可实现 ,combining triggers ,见 https://apscheduler.readthedocs.io/en/latest/modules/triggers/combining.html#module-apscheduler.triggers.combining
ASPchedulre提供多种配置方式 ,可以通过一个配置的dict或者作为可选关键字参数传入。或者也可先实例化scheduler,添加任务,然后再配置scheduler,这种方式取得最大的灵活性。
完整的而配置说明见 https://apscheduler.readthedocs.io/en/latest/modules/schedulers/base.html#apscheduler.schedulers.base.BaseScheduler
例如,选用BackgroundScheduler ,使用默认的job store 和默认的executor:
from apscheduler.schedulers.background import BackgroundScheduler
scheduler=BackgroundScheduler()
这将会用名为”default"的MemoryJobStore ,名为“default"的ThreadPoolExecutor,默认线程池最大量为10的配置创建一个 BackgroundScheduler 。
例1
from pytz import utc
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.mongodb import MongoDBJobStore
from apscheduler.executors.pool import ThreadPoolExecutor,ProcessPoolExecutor
jobstores={
'mongo':MongoDBJobStore(),
'default':SQLAlchemyJobStore(url='sqlite://jobs.sqlite')
}
executors={
'default':ThreadPoolExecutor(20),
'processpool':ProcessPoolExector(5)
}
job_defaults={
'coalesce':False,
'max_instances';3
}
scheduler=BackgroundScheduler(jonstores=jobstores,executors=executors,job_defaults,timezone=utc)
例2
from apsshceduler.schedulers.background import BackgroundScheduler
scheduler=BackgroundScheduler({
'apscheduler.jonstores.mongo':{
'type':'mongodb'
},
'apscheduler.jobstores.default':{
'type':'sqlalchemy',
'url':'sqlite:///jobs.sqlite'
},
'apscheduler.executors.default':{
'class':'apscheduler.executors.pool:ThreadExecutor',
'max_workers':'20'
},
'apscheduler.executors.processpool':{
'type':'processpool',
'max_workers':'5'
},
'apscheduler.job_defaults.coalesce':'false',
'apscheduler.job_defaults.max_instances':'3',
'apscheduler.timezone':'UTC',
}
)
例3
from pytz import utc
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ProcessPoolExecutor
jobstores={
'mongo':{'type':'mongodb'},
'default':SQLAlchemyJobStore(url='sqlite://jobs.sqlite')
}
executors={
'default':{'type':'threadpool','max_workers':20},
'processpool':ProcessPoolExecutor(max_workers=5)
}
job_defaults={
'coalesce':False,
'max_instances':3
}
scheduler=BackgroundScheduler()
scheduler,configure(jobstores=jobstores,executors=executors,job_defaults=job_defaults,timezone=utc)
apscheduler -定时任务的更多相关文章
- APScheduler定时任务
python模块(APScheduler定时任务) APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时 ...
- apscheduler(定时任务) 基于redis持久化配置操作
apscheduler(定时任务) 基于redis持久化配置操作 安装模块 pip install apscheduler 导入模块配置 ## 配置redis模块 from apscheduler.j ...
- Tornado集成Apscheduler定时任务
熟悉Python的人可能都知道,Apscheduler是python里面一款非常优秀的任务调度框架,这个框架是从鼎鼎大名的Quartz移植而来. 之前有用过Flask版本的Apscheduler做定时 ...
- Flask+APScheduler定时任务
1.安装依赖 pip install flask_apscheduler 2.使用定时任务 ```python from flask import Flask from flask_apschedul ...
- APScheduler定时任务框架
1.简介 APScheduler是一个Python**定时任务框架**,提供了**基于日期**.**固定时间间隔**以及**crontab**类型的任务,并且可以**持久化任务**.基于这些功能,我们 ...
- APScheduler——定时任务框架
https://www.cnblogs.com/luxiaojun/p/6567132.html
- uWSGI+APScheduler不能执行定时任务
在本地项目中使用APScheduler运行定时任务ok,但是在服务器上用uwsgi部署的Django环境下,APScheduler定时任务并不会被启动. 原因:uwsgi 默认one thread o ...
- python定时任务APScheduler
APScheduler定时任务 APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令.同时,它还支持异步执行.后台执行调度任务. 一.基本 ...
- 日夕如是寒暑不间,基于Python3+Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_220 定时任务的典型落地场景在各行业中都很普遍,比如支付系统中,支付过程中因为网络或者其他因素导致出现掉单.卡单的情况,账单变成了 ...
随机推荐
- vim的加密和解密?
vim中出现的错误提示含义: 参考: http://blog.csdn.net/u014599371/article/details/43955169 E488: trailing character ...
- kubernetes 命令记录
操作基本命令: 通过yaml文件创建: kubectl create -f xxx.yaml (不建议使用,无法更新,必须先delete) kubectl apply -f xxx.yaml (创 ...
- Leading and Trailing(数论/n^k的前三位)题解
Leading and Trailing You are given two integers: n and k, your task is to find the most significant ...
- [bzoj 1774][Usaco2009 Dec]Toll 过路费
题目描述 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费 ...
- The way to Go(1): Introduction
Reference: Github: Go Github: The way to Go Introduction to Go 设计要求: 能够以更快的速度开发软件 开发出的软件能够很好地在现代的多核计 ...
- Ubuntu16.04 无法连接WiFi
在安装完 ns-3.25 之后,着手开始准备 Eclipse 的安装,打开了 Firefox游览器 准备上网的时候,发现网络没有正常连接. 刚刚开始怀疑的是,并没有连接上网络. 于是打开了终端,pin ...
- Parallel.For with await and wait()
static void Parallel2() { ParallelLoopResult result = Parallel.For(, , i => { Log($"S:{i} &q ...
- 微信小程序之可滚动视图 scroll-view 的使用注意
微信小程序之可滚动视图 scroll-view 使用注意: 1.scroll-view 中的需要滑动的元素不可以用 float 浮动: 2.scroll-view 中的包裹需要滑动的元素的大盒子用 d ...
- bnu 51636 Squared Permutation 线段树
Squared Permutation Time Limit: 6000ms Memory Limit: 262144KB 64-bit integer IO format: %lld Ja ...
- Python day11 filter函数筛选数据,reduce函数压缩数据的源码详解
1.filter滤波器函数定义一个数组,需求:过滤出带ii的字符串 arr=['dsdsdii','qqwe','pppdiimmm','sdsa','sshucsii','iisdsa'] def ...