Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python任务调度模块APSched

Python任务调度模块APSched

作者头像
py3study
发布于 2020-01-06 07:36:24
发布于 2020-01-06 07:36:24
1.1K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

介绍

官网文档:http://apscheduler.readthedoc... APIhttp://apscheduler.readthedoc...

APScheduler是一个python的第三方库,用来提供python的后台程序。包含四个组件,分别是:

  • triggers: 任务触发器组件,提供任务触发方式
  • job stores: 任务商店组件,提供任务保存方式
  • executors: 任务调度组件,提供任务调度方式
  • schedulers: 任务调度组件,提供任务工作方式

安装

pip 安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip install apscheduler

源码安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python setup.py install

简单的实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from apscheduler.schedulers.blocking import BlockingScheduler
import time

# 实例化一个调度器
scheduler = BlockingScheduler()
 
def job1():
    print "%s: 执行任务"  % time.asctime()

# 添加任务并设置触发方式为3s一次
scheduler.add_job(job1, 'interval', seconds=3)

# 开始运行调度器
scheduler.start()

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python first.py
Fri Sep  8 20:41:55 2017: 执行任务
Fri Sep  8 20:41:58 2017: 执行任务
...

各组件功能

trigger组件

trigger提供任务的触发方式,共三种方式:

  • date:只在某个时间点执行一次run_date(datetime|str)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scheduler.add_job(my_job, 'date', run_date=date(2017, 9, 8), args=[])
scheduler.add_job(my_job, 'date', run_date=datetime(2017, 9, 8, 21, 30, 5), args=[])
scheduler.add_job(my_job, 'date', run_date='2017-9-08 21:30:05', args=[])
# The 'date' trigger and datetime.now() as run_date are implicit
sched.add_job(my_job, args=[[])
  • interval: 每隔一段时间执行一次weeks=0 | days=0 | hours=0 | minutes=0 | seconds=0, start_date=None, end_date=None, timezone=None
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scheduler.add_job(my_job, 'interval', hours=2)
scheduler.add_job(my_job, 'interval', hours=2, start_date='2017-9-8 21:30:00', end_date='2018-06-15 21:30:00)

@scheduler.scheduled_job('interval', id='my_job_id', hours=2)
def my_job():
    print("Hello World")
  • cron: 使用同linux下crontab的方式(year=None, month=None, day=None, week=None, day_of_week=None, hour=None, minute=None, second=None, start_date=None, end_date=None, timezone=None)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sched.add_job(my_job, 'cron', hour=3, minute=30)
sched.add_job(my_job, 'cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2017-10-30')

@sched.scheduled_job('cron', id='my_job_id', day='last sun')
def some_decorated_task():
    print("I am printed at 00:00:00 on the last Sunday of every month!")

scheduler组件

scheduler组件提供执行的方式,在不同的运用环境中选择合适的方式

  • BlockingScheduler: 进程中只运行调度器时的方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from apscheduler.schedulers.blocking import BlockingScheduler
import time

scheduler = BlockingScheduler()
 
def job1():
    print "%s: 执行任务"  % time.asctime()

scheduler.add_job(job1, 'interval', seconds=3)
scheduler.start()
  • BackgroundScheduler: 不想使用任何框架时的方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from apscheduler.schedulers.background import BackgroundScheduler
import time

scheduler = BackgroundScheduler()
 
def job1():
    print "%s: 执行任务"  % time.asctime()

scheduler.add_job(job1, 'interval', seconds=3)
scheduler.start()

while True:
    pass
  • AsyncIOScheduler: asyncio module的方式(Python3)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from apscheduler.schedulers.asyncio import AsyncIOScheduler
try:
    import asyncio
except ImportError:
    import trollius as asyncio
...
...
# while True:pass 
try:
    asyncio.get_event_loop().run_forever()
except (KeyboardInterrupt, SystemExit):
    pass
  • GeventScheduler: gevent方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from apscheduler.schedulers.gevent import GeventScheduler

...
...

g = scheduler.start()
# while True:pass
try:
    g.join()
except (KeyboardInterrupt, SystemExit):
    pass
  • TornadoScheduler: Tornado方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tornado.ioloop import IOLoop
from apscheduler.schedulers.tornado import TornadoScheduler

...
...

# while True:pass
try:
    IOLoop.instance().start()
except (KeyboardInterrupt, SystemExit):
    pass
  • TwistedScheduler: Twisted方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from twisted.internet import reactor
from apscheduler.schedulers.twisted import TwistedScheduler

...
...

# while True:pass
try:
    reactor.run()
except (KeyboardInterrupt, SystemExit):
    pass
  • QtScheduler: Qt方式

executors组件

executors组件提供任务的调度方式

  • base
  • debug
  • gevent
  • pool(max_workers=10)
  • twisted

jobstore组件

jobstore提供任务的各种持久化方式

  • base
  • memory
  • mongodb scheduler.add_jobstore('mongodb', collection='example_jobs')
  • redis scheduler.add_jobstore('redis', jobs_key='example.jobs', run_times_key='example.run_times')
  • rethinkdb scheduler.add_jobstore('rethinkdb', database='apscheduler_example')
  • sqlalchemy scheduler.add_jobstore('sqlalchemy', url=url)
  • zookeeper scheduler.add_jobstore('zookeeper', path='/example_jobs')

任务操作

添加任务add_job(如上)

如果使用了任务的存储,开启时最好添加replace_existing=True,否则每次开启都会创建任务的副本 开启后任务不会马上启动,可修改trigger参数

删除任务remove_job

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 根据任务实例删除
job = scheduler.add_job(myfunc, 'interval', minutes=2)
job.remove()

# 根据任务id删除
scheduler.add_job(myfunc, 'interval', minutes=2, id='my_job_id')
scheduler.remove_job('my_job_id')

任务的暂停pause_job和继续resume_job

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
job = scheduler.add_job(myfunc, 'interval', minutes=2)
# 根据任务实例
job.pause()
job.resume()

# 根据任务id暂停
scheduler.add_job(myfunc, 'interval', minutes=2, id='my_job_id')
scheduler.pause_job('my_job_id')
scheduler.resume_job('my_job_id')

任务的修饰modify和重设reschedule_job

修饰:job.modify(max_instances=6, name='Alternate name') 重设:scheduler.reschedule_job('my_job_id', trigger='cron', minute='*/5')

调度器操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def my_listener(event):
    if event.exception:
        print('The job crashed :(')
    else:
        print('The job worked :)')

scheduler.add_listener(my_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)

官方实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pytz import utc

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.mongodb import MongoDBJobStore
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor


jobstores = {
    'mongo': MongoDBJobStore(),
    'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
executors = {
    'default': ThreadPoolExecutor(20),
    'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
    'coalesce': False,
    'max_instances': 3
}
scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 定时任务的实现方式
目前所在的项目组需要经常执行一些定时任务,之前都是用 Node.JS 的 cron来实现 schedule job。可是这次需要连接不同的 DB,而且实现的逻辑也有些许不同,于是选择使用 Python 的定时器。
李振
2021/11/26
1.6K0
Python 定时任务的实现方式
Python实现定时任务的几种方法
该方法能够执行固定间隔时间的任务,时间间隔由time.sleep()的睡眠时间指定。
Steve Wang
2021/12/20
3.9K0
Python基于APScheduler实现定时任务
Python这个语言的优势就在于有丰富的第三方库,既然原生实现有这样那样的缺点,我们可以借助第三方库来实现定时任务。
Steve Wang
2021/12/20
2.6K0
轻量级python定时器apscheduler
cron也有缺点: 1、不适合复杂的定时任务 2、定时任务修改,需要重启crontab管理 3、定时任务,没有状态存储,也不是知道是否执行了
测试加
2022/04/27
1.1K0
轻量级python定时器apscheduler
python定时任务最强框架APScheduler详细教程
上次测试女神听了我的建议,已经做好了要给项目添加定时任务的决定了。但是之前提供的四种方式中,她不知道具体选择哪一个。为了和女神更近一步,我把我入行近10年收藏的干货免费拿出来分享给女神,希望女神凌晨2点再找我的时候,不再是因为要给他调程序了。
无涯WuYa
2020/07/15
8.3K0
python定时任务最强框架APScheduler详细教程
Python定时任务(下)
上篇文章,我们了解到有三种办法能实现定时任务,但是都无法做到循环执行定时任务。因此,需要一个能够担当此重任的库。它就是 APScheduler。
猴哥yuri
2018/08/16
2K0
Python下定时任务框架APSched
今天准备实现一个功能需要用到定时执行任务,所以就看到了Python的一个定时任务框架APScheduler,试了一下感觉还不错。
py3study
2020/01/08
1.5K0
Python定时任务
1、第一种办法是最简单又最暴力。那就是在一个死循环中,使用线程睡眠函数 sleep()。
周小董
2019/03/25
5.8K0
Python定时任务
Python定时任务神器-APScheduler
但是这些定时任务库都只是提供了简答的,或者只支持静态的定时任务。而对于需要复杂定时功能,或者动态注册定时任务的场景,则无法满足。
上帝De助手
2019/09/17
3.1K0
Python定时任务框架之Apscheduler 案例分享
  前面已经讲过Celery做定时任务的场景,现在分享另一个框架Apscheduler。Apscheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。同时,它还支持异步执行、后台执行调度任务。本人小小的建议是一般项目用APScheduler,因为不用像Celery那样再单独启动worker、beat进程,而且API也很简洁。
全栈测试开发日记
2023/02/02
1.8K0
Python定时任务框架之Apscheduler 案例分享
Python任务调度模块 – APScheduler,Flask-APScheduler实现定时任务
  看代码,定义一个函数,然后定义一个scheduler类型,添加一个job,然后执行,就可以了,代码是不是超级简单,而且非常清晰。看看结果吧。
用户1214487
2018/07/31
4.8K0
Python任务调度模块 – APScheduler,Flask-APScheduler实现定时任务
python apschedule安装使用与源码分析
我们的项目中用apschedule作为核心定时调度模块。所以对apschedule进行了一些调查和源码级的分析。 1、为什么选择apschedule? 听信了一句话,apschedule之于python就像是quartz之于java。实际用起来还是不错的。 2、安装 # pip安装方式 $ pip install apscheduler # 源码编译方式 $ wget https://pypi.python.org/pypi/APScheduler/#downloads $ python setup.py
用户1225216
2018/03/05
2.6K0
Python 实现定时任务的八种方案!
来源:https://www.biaodianfu.com/python-schedule.html
Python编程与实战
2021/10/12
34.2K0
Flask 学习-86.Flask-APScheduler 创建定时任务
Flask-APScheduler是根据APScheduler编写的一个flask模块,它提供了API管理任务。
上海-悠悠
2023/01/03
2.2K0
python定时模块:apscheduler
其中 BlockingScheduler是阻塞性的调度器,是最基本的调度器,下面调用 start方法就会阻塞当前进程,所以如果你的程序除了调度进程没有其他后台进程,那么是可以是否的,否则这个调度器会阻塞你程序的正常执行。
悟乙己
2021/12/07
9330
python定时模块:apscheduler
【Python】APScheduler简介
APScheduler,全称是_Advanced Python Scheduler_,具体的介绍可以看PyPI或者readthedocs的文档介绍,这篇 blog 主要是翻译User Guide一节的主要内容,不过惯例还是先简单介绍一下这个库特别的地方。
用户5522200
2020/05/11
2.8K0
高效定时任务处理:深入学习Python中APScheduler库的奥秘
APScheduler是Python中一个强大的第三方库,用于在后台执行定时任务。它允许我们根据设定的时间间隔、日期规则或特定时间来执行任务,适用于定时执行脚本、定时发送邮件、定时处理数据等场景。APScheduler的功能使得在Python中实现定时任务变得非常简单和高效。本文将从入门到精通地介绍APScheduler库的使用方法,带你掌握在Python中实现定时任务的技巧。
子午Python
2023/08/14
3.3K0
Python 调度相关包的使用
Job store:如果任务调度信息存在内存中,当程序退出后会丢失,可以其他存储器进行持久化存储
dandelion1990
2024/03/09
1640
python定时任务:apscheduler的使用
APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。基于这些功能,我们可以很方便的实现一个python定时任务系统。
KEVINGUO_CN
2020/03/17
1.3K0
django-apschedule定时任务异常停止
在django项目中使用django-apschedule来实现定时任务,使用的是BackgroundScheduler调度类,该调度的实现是通过后台线程的方式执行定时任务。其中任务都是持久化到数据库中的。
编程黑洞
2023/11/17
5600
相关推荐
Python 定时任务的实现方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验