Python任务调度模块APScheduler使用

作者:cool小伙 时间:2021-08-23 05:45:44 

APScheduler是一个Python定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务、并以daemon方式运行应用。

在APScheduler中有四个组件:

  • 触发器(trigger)包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了他们自己初始配置意外,触发器完全是无状态的。简单说就是应该说明一个任务应该在什么时候执行。

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

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

  • 调度器(scheduler)任务控制器:通过配置executor、jobstore、trigger,使用线程池(ThreadPoolExecutor默认值20)或进程池(ProcessPoolExecutor 默认值5)并且默认最多3个(max_instances)任务实例同时运行,实现对job的增删改查等调度控制

你需要选择合适的调度器,这取决于你的应用环境和你使用APScheduler的目的。通常最常用的两个:

BlockingScheduler:当调度器是你应用中唯一要运行的东西时使用。

BackgroundScheduler:当你不运行任何其他框架时使用,并希望调度器在你应用的后台执行。

作业存储

支持4中作业存储,分别是:MemoryJobStore(存储在内存中)、sqlalchemy(关系型数据库)、mongodb(文档数据库)、redis(内存型键值对数据库)

触发方式

date:固定日期触发器:任务只运行一次,运行完毕自动清除;若错过指定运行时间,任务不会被创建

interval:时间间隔触发器,每个一定时间间隔执行一次。

cron:cron风格的任务触发。

Python任务调度模块APScheduler使用

Python任务调度模块APScheduler使用

作业操作

1. 添加作业:上面是通过add_job()来添加作业,另外还有一种方式是通过scheduled_job()修饰器来修饰函数。

@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!")

2. 移除作业

job = scheduler.add_job(myfunc,'interval', minutes=2)

job.remove()

Same,using an explicit job ID:

scheduler.add_job(myfunc,'interval', minutes=2, id='my_job_id')

scheduler.remove_job('my_job_id')

3. 暂停和恢复作业

暂停作业:

–apscheduler.job.Job.pause()

–apscheduler.schedulers.base.BaseScheduler.pause_job()

恢复作业:

–apscheduler.job.Job.resume()

–apscheduler.schedulers.base.BaseScheduler.resume_job()

4. 获得job列表

获得调度作业的列表,可以使用get_jobs()来完成,它会返回所有的job实例。或者使用print_jobs()来输出所有格式化的作业列表。

5. 修改作业

def some_decorated_task():

print("I am printed at 00:00:00 on the last Sunday of every month!")

6. 关闭调度器

默认情况下调度器会等待所有正在运行的作业完成后,关闭所有的调度器和作业存储。如果你不想等待,可以将wait选项设置为False。

scheduler.shutdown()

scheduler.shutdown(wait=False)

作业运行的控制

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

来源:https://www.cnblogs.com/xiaozengzeng/p/12159231.html

标签:Python,任务调度,模块,APScheduler
0
投稿

猜你喜欢

  • Asp中Scripting.TextStream 对象介绍

    2007-11-02 12:19:00
  • Oracle 数据 使用游标

    2009-07-02 12:14:00
  • Pycharm使用爬虫时遇到etree红线问题及解决

    2021-09-04 19:07:06
  • 1 行 Python 代码快速实现 FTP 服务器

    2022-02-19 18:17:41
  • 详解PHP结构型设计模式之桥接模式Bridge Pattern

    2023-05-25 06:58:55
  • python3 flask实现文件上传功能

    2022-11-19 18:42:10
  • php中防止SQL注入的最佳解决方法

    2023-08-19 21:52:20
  • python flask 多对多表查询功能

    2022-09-17 13:26:14
  • python-opencv实现视频指定帧数间隔图像的保存功能

    2021-05-28 16:51:50
  • 将自己的数据集制作成TFRecord格式教程

    2022-02-01 14:49:37
  • Python实现日志实时监测的示例详解

    2023-01-06 15:48:29
  • PIL.Image.open和cv2.imread的比较与相互转换的方法

    2021-05-06 22:09:38
  • Python中的super用法详解

    2022-06-29 16:43:04
  • 浅谈Python中eval的强大与危害

    2022-05-03 08:15:13
  • 在函数间不能传递32个以上参数的疑难问题

    2008-12-31 13:31:00
  • Python中你所不知道的星号 * 用法

    2022-08-06 15:25:43
  • ASP CacheControl 属性

    2009-04-28 13:09:00
  • python调用并链接MATLAB脚本详解

    2021-12-11 07:16:42
  • python 限制函数执行时间,自己实现timeout的实例

    2023-08-03 00:49:12
  • Django Python 获取请求头信息Content-Range的方法

    2022-09-09 07:04:53
  • asp之家 网络编程 m.aspxhome.com