iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python Apscheduler源
  • 406
分享到

Python Apscheduler源

PythonApscheduler 2023-01-31 08:01:00 406人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

最近公司有项目需要使用到定时任务,其定时逻辑类似于linux的Cron,就使用了Apscheduler这个类库。基于公司的业务,需要修改Apshceduler,故而研究了一下Apscheduler的代码。 Apscheduler的调度逻辑

最近公司有项目需要使用到定时任务,其定时逻辑类似于linux的Cron,就使用了Apscheduler这个类库。基于公司的业务,需要修改Apshceduler,故而研究了一下Apscheduler的代码。

Apscheduler的调度逻辑非常简单,越简单的东西往往也越有效。

调度器会开辟一个线程,这个线程会循环的从job_store中找到任务,计算任务的执行时间,并与当前时间做比较。如果任务的执行事件<=当前时间,就将任务的firetime放到一个列表中(runtimes)

    def _get_run_times(self, now):
        run_times = []
        next_run_time = self.next_run_time
        while next_run_time and next_run_time <= now:
            run_times.append(next_run_time)
            next_run_time = self.trigger.get_next_fire_time(next_run_time, now)

        return run_times

如果runtimes不为空,就将其放入Executor中,下面代码中的executor不是python线程池类,是Apscheduler的一个类,当然了,最终的结果是将任务放到线程池当中

                if run_times:
                    try:
                        executor.submit_job(job, run_times)

在BaseExecutor类中,有一个abstract method,负责将任务放到线程池当中,在其子类BasePoolExecutor中,继承了这个方法

    def _do_submit_job(self, job, run_times):
        def callback(f):
            exc, tb = (f.exception_info() if hasattr(f, 'exception_info') else
                       (f.exception(), getattr(f.exception(), '__traceback__', None)))
            if exc:
                self._run_job_error(job.id, exc, tb)
            else:
                self._run_job_success(job.id, f.result())

        f = self._pool.submit(run_job, job, job._jobstore_alias, run_times, self._logger.name)
        f.add_done_callback(callback)

代码中的self._pool可以是线程池,也可以是进程池,在concurrent.futures包中,已经是python3的标准类库了。

关于调度器的事件循环,如果让他一直循环不断的从job_store中取任务,然后判断,这样会十分浪费资源。Apscheduler在一次循环结束之前会计算任务下次执行事件与当前时间之差,然后让调度线程挂起直到那个时间到来。

    def _main_loop(self):
        wait_seconds = TIMEOUT_MAX
        while self.state != STATE_STOPPED:
            self._event.wait(wait_seconds)
            self._event.clear()
            wait_seconds = self._process_jobs()

self._process_jobs()的返回值就是上面说的那个时间,self._event.wait(wait_seconds)就是让当前线程等待这么长的一段时间

--结束END--

本文标题: Python Apscheduler源

本文链接: https://www.lsjlt.com/news/193126.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Python Apscheduler源
    最近公司有项目需要使用到定时任务,其定时逻辑类似于linux的Cron,就使用了Apscheduler这个类库。基于公司的业务,需要修改Apshceduler,故而研究了一下Apscheduler的代码。 Apscheduler的调度逻辑...
    99+
    2023-01-31
    Python Apscheduler
  • python 包之 APScheduler 定时任务
    目录一、安装二、定时执行一次三、间隔执行四、每日定时执行一次五、每几分钟执行一次六、每小时执行一次七、调度器分类一、安装 pip install apscheduler 二、定时执行...
    99+
    2024-04-02
  • python定时任务apscheduler如何使用
    这篇文章主要介绍了python定时任务apscheduler如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python定时任务apscheduler如何使用文章都会有所收获,下面我们一起来看看吧。安装p...
    99+
    2023-06-29
  • Python中apscheduler是如何执行的
    今天就跟大家聊聊有关Python中apscheduler是如何执行的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2...
    99+
    2023-06-14
  • Python定时库Apscheduler怎么用
    小编给大家分享一下Python定时库Apscheduler怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!        在Python中需要执行定...
    99+
    2023-06-25
  • 最新Python APScheduler 定时任务详解
    目录一、基本概念1.1、 触发器:triggers1.2、作业存储器:job stores1.3、执行器 executors1.4、调度器 schedulers二、调度器详解2.1、...
    99+
    2024-04-02
  • Python中如何使用APScheduler调度任务
    Python中如何使用APScheduler调度任务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 任务调度应用场景所谓的任务调度是指安排任务的执行计划,即何时执行,...
    99+
    2023-06-16
  • Tornado集成Apscheduler
    熟悉Python的人可能都知道,Apscheduler是python里面一款非常优秀的任务调度框架,这个框架是从鼎鼎大名的Quartz移植而来。 之前有用过Flask版本的Apscheduler做定时任务。刚好前不久接触了Tornado,...
    99+
    2023-01-31
    Tornado Apscheduler
  • Python定时库Apscheduler的简单使用
            在Python中需要执行定时任务,可以使用Apscheduler。   &n...
    99+
    2024-04-02
  • django apscheduler在特
        如何使程序在特定时间只执行一次,我查了一下。        celery可以,时间以秒计。 task = mytask.apply_async(args=[10, 20], countdown=60)   不过,我们存在以天...
    99+
    2023-01-31
    django apscheduler
  • Python定时库APScheduler的原理及用法
    这篇文章主要讲解了“Python定时库APScheduler的原理及用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python定时库APScheduler的原理及用法”吧!Python学...
    99+
    2023-06-02
  • Python第三方模块apscheduler安装和基本使用
    目录apscheduler 模块apscheduler 模块介绍支持的后端存储作业APScheduler有四种组成部分各组件简介apscheduler 模块使用触发器类型apsche...
    99+
    2023-03-06
    Python apscheduler安装和使用 Python apscheduler安装
  • Python中怎么使用apscheduler定时执行任务
    今天小编给大家分享一下Python中怎么使用apscheduler定时执行任务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-06-29
  • 详解Python使用apscheduler定时执行任务
    apscheduler 的使用   我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客...
    99+
    2024-04-02
  • python包之APScheduler定时任务怎么实现
    这篇文章主要介绍“python包之APScheduler定时任务怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python包之APScheduler定时任务怎么实现”文章能帮助大家解决问题。...
    99+
    2023-06-30
  • Python - 定时任务框架【APScheduler】基本使用详解(一)
    一. 前言 一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力 我们可以使用Django的模板...
    99+
    2023-09-06
    python 开发语言
  • Python定时任务框架APScheduler安装使用详解
    目录前言一、APscheduler简介二、APscheduler安装三、APscheduler组成部分1.Job 作业2.Trigger 触发器3.Jobstore 作业存储4.Ex...
    99+
    2024-04-02
  • python自动化测试中APScheduler Flask的应用示例
    目录使用背景什么是 APScheduler 框架?APScheduler 框架包含四个组成部分APScheduler 在 flask 中使用编写任务函数,开始 APScheduler...
    99+
    2024-04-02
  • python定时任务apscheduler的详细使用教程
    目录前言安装主要组成部分简单应用完整代码总结前言 我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客户微信...
    99+
    2024-04-02
  • Python使用apscheduler模块设置定时任务的实现
    目录一、安装二、ApScheduler 简介1 APScheduler的组件2 调度器的种类3 内置的触发器类型三、使用举例1 使用date类型的触发器2 使用interval类型的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作