我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python任务调度模块APSched

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python任务调度模块APSched

介绍

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

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

  • triggers: 任务触发器组件,提供任务触发方式

  • job stores: 任务商店组件,提供任务保存方式

  • executors: 任务调度组件,提供任务调度方式

  • schedulers: 任务调度组件,提供任务工作方式

安装

pip 安装

$ pip install apscheduler

源码安装

$ python setup.py install

简单的实例

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()

输出:

$ python first.py
Fri Sep  8 20:41:55 2017: 执行任务
Fri Sep  8 20:41:58 2017: 执行任务
...

各组件功能

trigger组件

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

  • date:只在某个时间点执行一次run_date(datetime|str)

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

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)

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: 进程中只运行调度器时的方式

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: 不想使用任何框架时的方式

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)

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方式

from apscheduler.schedulers.gevent import GeventScheduler

...
...

g = scheduler.start()
# while True:pass
try:
    g.join()
except (KeyboardInterrupt, SystemExit):
    pass
  • TornadoScheduler: Tornado方式

from tornado.ioloop import IOLoop
from apscheduler.schedulers.tornado import TornadoScheduler

...
...

# while True:pass
try:
    IOLoop.instance().start()
except (KeyboardInterrupt, SystemExit):
    pass
  • TwistedScheduler: Twisted方式

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

# 根据任务实例删除
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

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')

调度器操作

  • 开启 scheduler.start()

  • 关闭 scheduler.shotdown(wait=True | False)

  • 暂停 scheduler.pause()

  • 继续 scheduler.resume()

  • 监听 http://apscheduler.readthedoc...

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)

官方实例

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)

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python任务调度模块APSched

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python任务调度模块APSched

介绍官网文档:http://apscheduler.readthedoc...API:http://apscheduler.readthedoc...APScheduler是一个python的第三方库,用来提供python的后台程序。包含四
2023-01-31

Python下定时任务框架APSched

今天准备实现一个功能需要用到定时执行任务,所以就看到了Python的一个定时任务框架APScheduler,试了一下感觉还不错。1.APScheduler简介: APScheduler是Python的一个定时任务框架,可以很方便的满足用户定
2023-01-31

Python任务调度之sched

这次我们主要讲解下Python自带模块当中的sched,不但小巧,也很强大,在实际应用中,某些场合还是可以用到的。作为一名Linux的SA,我们已经习惯了用crontab,而sched提供了一种延迟处理机制,也可以理解为任务调度的另一种方式
2023-01-31

python:定时任务模块schedul

1.安装pip install schedule2.文档https://schedule.readthedocs.io/en/stable/faq.html#how-to-execute-jobs-in-parallel3.官网使用demo
2023-01-30

python调用fortran模块

在python中调用fortran代码,要用到f2py这个程序。它的项目主页在此。现在该项目已经合并到numpy中了,先安装python再装好numpy,就可以使用f2py。不过对windows平台必须使用gnu的fortran编译器gfo
2022-06-04

python任务调度框架怎么使用

Python任务调度框架最常用的是APScheduler,下面是APScheduler的使用步骤:1. 安装APScheduler:在终端中运行`pip install apscheduler`来安装APScheduler库。2. 导入AP
2023-09-21

并发任务调度:使用Go WaitGroup构建任务调度引擎

并发任务调度是一种将多个任务并行执行的技术,可以提高程序的执行效率。Go语言中提供了一个很方便的并发控制工具——WaitGroup,可以用来构建任务调度引擎。WaitGroup是一个计数器,用来等待一组任务的结束。当我们启动一个任务时,可以
2023-10-08

Python中如何使用APScheduler调度任务

Python中如何使用APScheduler调度任务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 任务调度应用场景所谓的任务调度是指安排任务的执行计划,即何时执行,怎么执行等
2023-06-16

ucos-3-任务调度1

转自:http://blog.csdn.net/chunzi417/article/details/5864755uC/OS-II的任务一般格式为:void TASKn(void *pdata){        pdata = pdata;
2023-01-31

Python利用sched模块实现定时任务

今天我们来介绍一下Python当中的定时任务,主要用到的模块是sched,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-05-14

Python怎么实现任务调度并行算法

本篇内容介绍了“Python怎么实现任务调度并行算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本来自己想先使用Java来写一个版本,然后
2023-06-04

Python怎么调用MySQL模块

Python怎么调用MySQL模块,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。调用MySQL 其实mysql模块有点类似于JDBC的一种角色,提供了访问数据库的一个接口,通
2023-06-04

SpringBoot 调度任务及常用任务表达式

1.首先需要用@EnableScheduling注解到*applicatin.java,用来检测是否有调度任务。2.@Scheduled 注解用于标注这个方法是一个定时任务的方法。Spring会自动扫描这个注解,启动调度任务。package
2023-05-30

python调试模块ipdb详解

ipdb是用来python中用以交互式debug的模块,可以直接利用pip安装,这篇文章主要介绍了python调试模块ipdb详解,需要的朋友可以参考下
2023-03-19

Python中schedule模块定时任务怎么使用

这篇“Python中schedule模块定时任务怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中sche
2023-06-30

Python怎么用sched模块实现定时任务

本文小编为大家详细介绍“Python怎么用sched模块实现定时任务”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python怎么用sched模块实现定时任务”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。牛刀小
2023-07-05

Python的周期任务调度工具是什么

本篇内容主要讲解“Python的周期任务调度工具是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python的周期任务调度工具是什么”吧!如果你想周期性地执行某个 Python 脚本,最出名
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录