python 任务调度框架_Python任务调度模块APScheduler

论坛 期权论坛     
选择匿名的用户   2021-5-30 02:05   141   0
<div style="font-size:16px;">
<p>一、APScheduler 是什么&amp;APScheduler四种组成部分?</p>
<p>APScheduler全程为Advanced Python Scheduler,是一款轻量级的Python任务调度框架。它允许你像Cron那样安排定期执行的任务,并且支持Python函数或任意可调用的对象。</p>
<p>1、调度器(scheduler)</p>
<p>调度器(scheduler)是其他的组成部分。你通常在应用只有一个调度器,应用的开发者通常不会直接处理作业存储、调度器和触发器,相反,调度器提供了处理这些的合适的接口。配置作业存储和执行器可以在调度器中完成,例如添加、修改和移除作业。</p>
<p>对于不同的不场景,可以选择的调度器:</p>
<p>BlockingScheduler : 当调度器是你应用中唯一要运行的东西时。</p>
<p>对于BlockingScheduler,程序则会阻塞在start()位置,所以,要运行的代码必须写在start()之前。</p>
<p>BackgroundScheduler : 当你没有运行任何其他框架并希望调度器在你应用的后台执行时使用(常用)。</p>
<p>AsyncIOScheduler : 当你的程序使用了asyncio(一个异步框架)的时候使用。</p>
<p>GeventScheduler : 当你的程序使用了gevent(高性能的Python并发框架)的时候使用。</p>
<p>TornadoScheduler : 当你的程序基于Tornado(一个web框架)的时候使用。</p>
<p>TwistedScheduler : 当你的程序使用了Twisted(一个异步框架)的时候使用</p>
<p>QtScheduler : 如果你的应用是一个Qt应用的时候可以使用。</p>
<p># BackgroundScheduler: 调度器在后台线程中运行,不会阻塞当前线程。</p>
<p>from apscheduler.schedulers.background import BackgroundScheduler</p>
<p>import time</p>
<p>scheduler &#61; BackgroundScheduler()</p>
<p>def job1():</p>
<p>print &#34;%s: 执行任务&#34; % time.asctime()</p>
<p>scheduler.add_job(job1, &#39;interval&#39;, seconds&#61;3)</p>
<p>scheduler.start()</p>
<p>while True:</p>
<p>pass</p>
<p>2、作业存储(job store)</p>
<p>作业存储(job store)主要用来存储被调度的作业,默认的作业存储是简单地把作业保存在内存中。</p>
<p>jobstore提供对scheduler中job的增删改查接口,根据存储方式的不同,分以下几种:</p>
<p>MemoryJobStore:没有序列化,jobs就存在内存里,增删改查也都是在内存中操作</p>
<p>SQLAlchemyJobStore:所有sqlalchemy支持的数据库都可以做为backend,增删改查操作转化为对应backend的sql语句</p>
<p>MongoDBJobStore:用mongodb作backend</p>
<p>RedisJobStore: 用redis作backend</p>
<p>RethinkDBJobStore: 用rethinkdb 作backend</p>
<p>ZooKeeperJobStore:用ZooKeeper做backend</p>
<p>3、执行器(executor)</p>
<p>执行器(executor)主要处理任务的运行,主要是把定时任务中的可调用对象(function)提交给一个一个线程或者进程来进行。当任务完成时,执行器将会通知调度器。</p>
<p>最常用的 执行器(executor) 有两种:</p>
<p>ProcessPoolExecutor(进程池)</p>
<p>ThreadPoolExecutor(线程池,max:10)</p>
<p>4、触发器(triggers)</p>
<p>当调度一个任务时,需要为它设置一个触发器(triggers)。触发器决定在什么日期/时间、用什么样的形式来执行执行这个定时任务。</p>
<p>APScheduler 有三种内建的 trigger:</p>
<p>date: 日期,指定某个确定的时间点,job仅执行一次。</p>
<p>interval: 间隔,指定时间间隔(fixed intervals)周期性执行。</p>
<p>cron: 周期,使用cron风格表达式周期性执行,用于(在指定时间内)定期运行job的场景。使用同linux下crontab的方式。</p>
<p>calendarinterval: 当您想要在一天中的特定时间以日历为基础的间隔运行任务时使用</p>
<p>一个任务也可以设定多种触发器,比如,可以设定同时满足所有触发器条件而触发,或者满足一项即触发。</p>
<p>4.1、date 定时调度(任务只会执行一次)</p>
<p>参数如下:</p>
<p>run_date (datetime|str) – 作业的运行日期或时间</p>
<p>timezone (datetime.tzinfo|str) – 指定时区</p>
<p>import datatime</p>
<p>from apscheduler.schedulers.blocking import BlockingScheduler</p>
<p>scheduler &#61; BlockingScheduler()</p>
<p>def my_job(text): print(text)</p>
<p># 2016-12-12运行一次job_function</p>
<p>sched.add_job(my_job, &#39;date&#39;, run_date&#61;date(2016, 12, 12), args&#61;[&#39;text&#39;])</p>
<p># 2016-12-12 12:00:00运行一次job_function</p>
<p># args&#61;[]中是传给job_function的参数</p>
<p>sched.add_job(my_job, &#39;date&#39;, run_date&#61;datetime.datetime(2016, 12, 12, 12, 0, 0), args&#61;[&#39;text&#39;])</p>
<p>scheduler.start() # 开启</p>
<p>4.2、interval: 每隔一段时间执行一次</p>
<p>weeks&#61;0 | days&#61;0 | hours&#61;0 | minutes&#61;0 | seconds&#61;0, start_date&#61;None, end_date&#61;None, timezone&#61;None</p>
<p>weeks (int) – 间隔几周</p>
<p>days (int) – 间隔几天</p>
<p>hours (int) – 间隔几小时</p>
<p>minutes (int) – 间隔几分钟</p>
<p>seconds (int) – 间隔多少秒</p>
<p>start
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP