Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >轻量级python定时器apscheduler

轻量级python定时器apscheduler

作者头像
测试加
发布于 2022-04-27 07:38:23
发布于 2022-04-27 07:38:23
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

痛点

如果日常工作需求对定时器功能的依赖,

比如:

1、自动化脚本定时采集性能

2、在flask后端服务中,需要定时同步数据

3、定时启动某些程序

基于上述需要或者痛点,需要找一个定时器功能实现.

定时器功能第一时间想到的是linux自带的cron功能.

例子: crontab -e命令,新增一个如下命令,保存即可.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*/1 * * * * ~/pythonProject/dist/PingLocalMac >> ~/Desktop/PingLocalMac.txt

cron也有缺点: 1、不适合复杂的定时任务 2、定时任务修改,需要重启crontab管理 3、定时任务,没有状态存储,也不是知道是否执行了

如果你的需求正好是cron不能实现的,那给你推荐一款python轻量级定时器"apscheduler"

简介

APScheduler是python的一个定时任务调度框架,能实现类似linux下crontab类型的任务,使用起来比较方便。它提供基于固定时间间隔、日期以及crontab配置类似的任务调度。

安装

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

基本概念介绍

触发器(triggers):

触发器包含调度逻辑,描述一个任务何时被触发,按日期或按时间间隔或按 cronjob 表达式三种方式触发。每个作业都有它自己的触发器,除了初始配置之外,触发器是完全无状态的。

作业存储器(job stores):

作业存储器指定了作业被存放的位置,默认情况下作业保存在内存,也可将作业保存在各种数据库中,当作业被存放在数据库中时,它会被序列化,当被重新加载时会反序列化。作业存储器充当保存、加载、更新和查找作业的中间商。在调度器之间不能共享作业存储。

执行器(executors):

执行器是将指定的作业(调用函数)提交到线程池或进程池中运行,当任务完成时,执行器通知调度器触发相应的事件。

调度器(schedulers):任务调度器,属于控制角色,通过它配置作业存储器、执行器和触发器,添加、修改和删除任务。调度器协调触发器、作业存储器、执行器的运行,通常只有一个调度程序运行在应用程序中,开发人员通常不需要直接处理作业存储器、执行器或触发器,配置作业存储器和执行器是通过调度器来完成的。

调度器的工作流程

入门脚本

启动一个阻塞性脚本,每隔3s打印一次

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
# Time: 2018/10/13 19:01:30
# File Name: ex_interval.py

from datetime import datetime
import os
from apscheduler.schedulers.blocking import BlockingScheduler


def tick():
    print('Tick! The time is: %s' % datetime.now())

if __name__ == '__main__':
    scheduler = BlockingScheduler()
    scheduler.add_job(tick, 'interval', seconds=3)
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C    '))

    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass

    print("#######################")

block定时器

使用配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jobstores = {
     #'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite'),
     # 本地数据库地址
     # 使用内存作为数据库
    'default': MemoryJobStore()
}
executors = {
    'default': ThreadPoolExecutor(20), # 线程池
    'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
    'coalesce': False,
    'max_instances': 3 # 实力个数
}

cron 任务

定时 cron 任务也非常简单,直接给触发器 trigger 传入 'cron' 即可。hour =19 ,minute =23 这里表示每天的19:23 分执行任务。这里可以填写数字,也可以填写字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
# Time: 2018/10/13 19:21:09
# File Name: ex_cron.py


from datetime import datetime
import os
from apscheduler.schedulers.blocking import BlockingScheduler

def tick():
    print('Tick! The time is: %s' % datetime.now())

if __name__ == '__main__':
    scheduler = BlockingScheduler()
    scheduler.add_job(tick, 'cron', hour=19,minute=23)
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C    '))

    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hour =19 , minute =23
hour ='19', minute ='23'
minute = '*/3' 表示每 5 分钟执行一次
hour ='19-21', minute= '23' 表示 19:2320:2321:23 各执行一次任务

background定时器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
后台性定时器
"""

import os
import time
import datetime
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
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.jobstores.memory import MemoryJobStore
from apscheduler.events import EVENT_JOB_EXECUTED, EVENT_JOB_ERROR

import logging
logging.basicConfig()
logging.getLogger('apscheduler').setLevel(logging.DEBUG)


def my_job(id='my_job_id'):
    print(id, '-->', datetime.datetime.now())
    #scheduler.pause() # 暂停
    #scheduler.resume() # 恢复
    #scheduler.start(paused=True)
    print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), id)

scheduler = BackgroundScheduler()
scheduler.add_job(my_job, trigger='interval',seconds=1, id='my_job_id_test')
scheduler.start()

配置调度器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jobstores = {
    # 'mongo': MongoDBJobStore(),
    #'mongo': {'type': 'mongodb'},
    #'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite'),
    # 使用数据库作为存储器
    'default': MemoryJobStore()
}
executors = {
    'default': ThreadPoolExecutor(20),
    'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
    'coalesce': False,
    'max_instances': 3
}

scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults)

其他方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scheduler.remove_job('my_job_id') 
# 移除任务

print(scheduler.get_jobs())
# 获取任务列表

print(scheduler.get_job(job_id="my_job_id"))
# 获取任务详情

temp_dict = {"seconds": 5}
temp_trigger = scheduler._create_trigger(trigger='interval', trigger_args=temp_dict)
result = scheduler.modify_job(job_id='my_job_id_test', trigger=temp_trigger)
# 修改任务

result = scheduler.reschedule_job(job_id='my_job_id_test', trigger='interval', seconds=4)
# 修改任务

scheduler.pause() 
# 暂停作业

scheduler.resume() 
# 恢复作业

监听事件

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

scheduler.add_listener(my_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试加 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python定时任务最强框架APScheduler详细教程
上次测试女神听了我的建议,已经做好了要给项目添加定时任务的决定了。但是之前提供的四种方式中,她不知道具体选择哪一个。为了和女神更近一步,我把我入行近10年收藏的干货免费拿出来分享给女神,希望女神凌晨2点再找我的时候,不再是因为要给他调程序了。
无涯WuYa
2020/07/15
8.3K0
python定时任务最强框架APScheduler详细教程
Python基于APScheduler实现定时任务
Python这个语言的优势就在于有丰富的第三方库,既然原生实现有这样那样的缺点,我们可以借助第三方库来实现定时任务。
Steve Wang
2021/12/20
2.6K0
python APScheduler基本使用
https://pypi.python.org/simple/apscheduler/
一朵灼灼华
2022/08/05
5110
太好用了!Python 定时任务调度框架 APScheduler 详解!
我们在工作过程中,可能会遇到有定时任务的需求。大部分定时任务偏向 数据采集、消息提醒、邮件自动发送、数据指标统计 等场景。
Python兴趣圈
2023/12/11
6.9K0
太好用了!Python 定时任务调度框架 APScheduler 详解!
Python 定时任务的实现方式
目前所在的项目组需要经常执行一些定时任务,之前都是用 Node.JS 的 cron来实现 schedule job。可是这次需要连接不同的 DB,而且实现的逻辑也有些许不同,于是选择使用 Python 的定时器。
李振
2021/11/26
1.6K0
Python 定时任务的实现方式
Flask 学习-87.Flask-APScheduler 持久化定时任务保存到mysql数据库
APScheduler 有四种组件,分别是:调度器(scheduler),作业存储(job store),触发器(trigger),执行器(executor)。
上海-悠悠
2023/01/03
2.5K0
Flask 学习-87.Flask-APScheduler 持久化定时任务保存到mysql数据库
Python 调度相关包的使用
Job store:如果任务调度信息存在内存中,当程序退出后会丢失,可以其他存储器进行持久化存储
dandelion1990
2024/03/09
1550
Flask 学习-86.Flask-APScheduler 创建定时任务
Flask-APScheduler是根据APScheduler编写的一个flask模块,它提供了API管理任务。
上海-悠悠
2023/01/03
2.2K0
Python定时器APScheduler
简介:APScheduler是python的一个定时任务调度框架,能实现类似linux下crontab类型的任务,使用起来比较方便。它提供基于固定时间间隔、日期以及crontab配置类似的任务调度。
沈宥
2022/05/10
1.2K0
Python定时器APScheduler
Python定时任务神器-APScheduler
但是这些定时任务库都只是提供了简答的,或者只支持静态的定时任务。而对于需要复杂定时功能,或者动态注册定时任务的场景,则无法满足。
上帝De助手
2019/09/17
3.1K0
python定时模块:apscheduler
其中 BlockingScheduler是阻塞性的调度器,是最基本的调度器,下面调用 start方法就会阻塞当前进程,所以如果你的程序除了调度进程没有其他后台进程,那么是可以是否的,否则这个调度器会阻塞你程序的正常执行。
悟乙己
2021/12/07
9290
python定时模块:apscheduler
Python下定时任务框架APSched
今天准备实现一个功能需要用到定时执行任务,所以就看到了Python的一个定时任务框架APScheduler,试了一下感觉还不错。
py3study
2020/01/08
1.5K0
Python定时任务(下)
上篇文章,我们了解到有三种办法能实现定时任务,但是都无法做到循环执行定时任务。因此,需要一个能够担当此重任的库。它就是 APScheduler。
猴哥yuri
2018/08/16
2K0
Python中定时任务框架APScheduler入门
如果对Python的环境搭建及模块安装还不熟悉,可以看看我写的另一篇博客 Python环境搭建及模块安装 。
Qwe7
2022/03/17
9670
Python 实现定时任务的八种方案!
来源:https://www.biaodianfu.com/python-schedule.html
Python编程与实战
2021/10/12
34.2K0
python高级线程编程-定时器和周期任务(三)
APScheduler是一个Python库,可以用来实现定时器和周期任务。它支持多种调度器和触发器类型,例如日期、时间间隔和cron表达式等。
玖叁叁
2023/04/20
4160
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定时任务框架之Apscheduler 案例分享
  前面已经讲过Celery做定时任务的场景,现在分享另一个框架Apscheduler。Apscheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。同时,它还支持异步执行、后台执行调度任务。本人小小的建议是一般项目用APScheduler,因为不用像Celery那样再单独启动worker、beat进程,而且API也很简洁。
全栈测试开发日记
2023/02/02
1.8K0
Python定时任务框架之Apscheduler 案例分享
Python实现定时任务的几种方法
该方法能够执行固定间隔时间的任务,时间间隔由time.sleep()的睡眠时间指定。
Steve Wang
2021/12/20
3.9K0
python定时任务:apscheduler的使用
APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。基于这些功能,我们可以很方便的实现一个python定时任务系统。
KEVINGUO_CN
2020/03/17
1.3K0
相关推荐
python定时任务最强框架APScheduler详细教程
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档