PYTHON任务调度

今天自学了下任务调度机。
就是定时任务。

然后上网查,人人都说apscheduler这个模块好。
我信了好吧。

查了查任务调度程序的网站:

既然有官方文档,我就不献丑瞎写了——官方文档说的通俗易懂,(但是总觉得某些功能没说),直接去看官方文档就好。

https://apscheduler.readthedocs.io/en/stable/index.html

给我的感觉:
本机调度,基本上没有什么问题,但是多主机调度似乎并不行。

这个脚本的路径都很深(我第一次看到脚本这么深的)
常见的调度有两种:阻塞性BlockingScheduler和非阻塞性的ackgroundScheduler,还有其他全局优化的调度器。

阻塞性就是:一次只能运行一个脚本,其他脚本不能运行。
非阻塞性就是:多个脚本并行。

大概逻辑很简单:每个系统有个执行器,然后你往执行器里写入需要运行的脚本和函数并定好时间,然后开启执行器就可以了。

调度机有这么几个好处:定时、稳定、独立。
比如说:某个进程报错退出,是并不影响其他任务的运行的。支持并行(不过PYTHON似乎是有全局锁的,一个时间点只能运行一个进程,不是真正的并行),但是程序里面有一个似乎支持多核,以后看看。

我查官方文档生成的调度机如下:

# 堵塞性调度器,每次只能运行一个进程
from apscheduler.schedulers.blocking import BlockingScheduler
# 并行性调度器,可以在后台运行多个进程
from apscheduler.schedulers.background import BackgroundScheduler
# 报错模式
from apscheduler.events import EVENT_JOB_ERROR, EVENT_JOB_MISSED
from loguru import logger
import arrow
import time
import datetime


def log():
    logger.debug(arrow.now())


def log1():
    logger.warning('定时任务2')


def listen(event):
    logger.warning(event.exception)

# 非阻塞调度器,后台运行,不影响整个进程
scheduler = BackgroundScheduler()
# 标准的调度写法
# jitter振动器,可以动态调整程序运行时间,防止程序运行堵塞
scheduler.add_job(log, 'interval', seconds=30, jitter=1)
# 不等待直接调用任务调度
# id可以指定任务的ID
# insterval是间隔
scheduler.add_job(log1, 'interval', seconds=30, jitter=1, id='1', next_run_time=datetime.datetime.now())
# 选择只显示错过和故障
scheduler.add_listener(listen, EVENT_JOB_ERROR | EVENT_JOB_MISSED)
# 开始事务
# 调度机开始的时候,就不能够修改程序的状态
scheduler.start()
# 获取所有的事务
logger.info(scheduler.get_jobs())
logger.debug('over!')
time.sleep(600)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值