简单的Python调度器Schedule详解
最近在做项目的时候经常会用到定时任务,由于我的项目是使用Java来开发,用的是SpringBoot框架,因此要实现这个定时任务其实并不难。
后来我在想如果我要在Python中实现,我要怎么做呢?
一开始我首先想到的是Timer
Timer
这个是一个扩展自threading模块来实现的定时任务。它其实是一个线程。
# 首先定义一个需要定时执行的方法 >>> def hello(): print("hello!") # 导入threading,并创建Timer,设置1秒后执行hello方法 >>> import threading >>> timer = threading.Timer(1,hello) >>> timer.start() # 1秒后打印 >>> hello!
这个内置的工具使用起来也简单,对于熟悉Java的同学来说也是非常容易的。然而我一直能否有一个更加Pythonic的工具或者类库呢?
这时我看到一篇文章介绍Scheduler类库的使用,突然觉得这就是我想要的
Scheduler
要使用这个库先使用以下命令进行安装
pip install schedule
schedule模块中的方法可读性非常好,而且支持链式调用
import schedule # 定义需要执行的方法 def job(): print("a simple scheduler in python.") # 设置调度的参数,这里是每2秒执行一次 schedule.every(2).seconds.do(job) if __name__ == '__main__': while True: schedule.run_pending() # 执行结果 a simple scheduler in python. a simple scheduler in python. a simple scheduler in python. ...
其它设置调度参数的方法
# 每小时执行 schedule.every().hour.do(job) # 每天12:25执行 schedule.every().day.at("12:25").do(job) # 每2到5分钟时执行 schedule.every(5).to(10).minutes.do(job) # 每星期4的19:15执行 schedule.every().thursday.at("19:15").do(job) # 每第17分钟时就执行 schedule.every().minute.at(":17").do(job)
如果要执行的方法需要参数呢?
# 需要执行的方法需要传参 def job(val): print(f'hello {val}') # schedule.every(2).seconds.do(job) # 使用带参数的do方法 schedule.every(2).seconds.do(job, "hylinux") # 执行结果 hello hylinux hello hylinux hello hylinux hello hylinux hello hylinux hello hylinux ...
是不是很简单?
学习资料
https://bhupeshv.me/A-Simple-Scheduler-in-Python/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
python编写网页爬虫脚本并实现APScheduler调度
前段时间自学了python,作为新手就想着自己写个东西能练习一下,了解到python编写爬虫脚本非常方便,且最近又学习了MongoDB相关的知识,万事具备只欠东风. 程序的需求是这样的,爬虫爬的页面是京东的电子书网站页面,每天会更新一些免费的电子书,爬虫会把每天更新的免费的书名以第一时间通过邮件发给我,通知我去下载. 一.编写思路: 1.爬虫脚本获取当日免费书籍信息 2.把获取到的书籍信息与数据库中的已有信息作比较,如果书籍存在不做任何操作,书籍不存在,执行插入数据库的操作,把数据的信息存入Mo
-
Python实现调度算法代码详解
调度算法 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源.这就是调度.目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源. 在操作系统中调度是指一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法.对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法:又如在分时系统中,为了保证系统具有合理
-
Python中定时任务框架APScheduler的快速入门指南
前言 大家应该都知道在编程语言中,定时任务是常用的一种调度形式,在Python中也涌现了非常多的调度模块,本文将简要介绍APScheduler的基本使用方法. 一.APScheduler介绍 APScheduler是基于Quartz的一个python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务. APScheduler提供了多种不同的调度器,方便开发者根据自己的实际需要进行使用:同时也提供了不同的存储机
-
Python使用multiprocessing实现一个最简单的分布式作业调度系统
mutilprocess像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多. 介绍 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上.一个服务进程可以作为调度者,将任务分布到其他多个机器的多个进程中,依靠网络通信. 想到这,就在想是不是可以使用此模块来实现一个简单的作业调度系统. 实现 Job 首先创建一个Job类,为了测试简单,只包含一
-
详解python调度框架APScheduler使用
最近在研究python调度框架APScheduler使用的路上,那么今天也算个学习笔记吧! # coding=utf-8 """ Demonstrates how to use the background scheduler to schedule a job that executes on 3 second intervals. """ from datetime import datetime import time import os
-
Python使用Redis实现作业调度系统(超简单)
概述 Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型. Redis可以将数据复制到任意数量的从服务器. Redis 优势 异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录. 支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集
-
Python利用multiprocessing实现最简单的分布式作业调度系统实例
介绍 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上.一个服务进程可以作为调度者,将任务分布到其他多个机器的多个进程中,依靠网络通信.想到这,就在想是不是可以使用此模块来实现一个简单的作业调度系统.在这之前,我们先来详细了解下python中的多进程管理包multiprocessing. multiprocessing.Process multiprocessing包是Python中的多进程管理包.它与 threading.
-
简单的Python调度器Schedule详解
最近在做项目的时候经常会用到定时任务,由于我的项目是使用Java来开发,用的是SpringBoot框架,因此要实现这个定时任务其实并不难. 后来我在想如果我要在Python中实现,我要怎么做呢? 一开始我首先想到的是Timer Timer 这个是一个扩展自threading模块来实现的定时任务.它其实是一个线程. # 首先定义一个需要定时执行的方法 >>> def hello(): print("hello!") # 导入threading,并创建Timer,设置1秒
-
React为什么需要Scheduler调度器原理详解
目录 正文 我们为什么需要Scheduler(调度器) Scheduler如何进行工作 总结 正文 最近在重学React,由于近两年没使用React突然重学发现一些很有意思的概念,首先便是React的Scheduler(调度器) 由于我对React的概念还停留在React 15之前(就是那个没有hooks的年代),所以接触Scheduler(调度器) 让我感觉很有意思: 在我印象中React的架构分为两层(React 16 之前) Reconciler(协调器)—— 负责找出变化的组件 Rend
-
laravel异步监控定时调度器实例详解
定时调度器是什么 laravel默认提供了一个命令定时任务的功能,在其他的php框架下面,没有这个定时任务,我们要跑一些异步脚本怎么操作呢,只能依赖我们系统提供的crontab来做,这就导致我们每次发版本新增定时任务都要去服务器更改crontab代码,获取更新这个配置. 执行命令是php artisan schedule:run 来执行,那放在哪里执行呢,没错这个调起还是需要依赖我们crontab来执行,但是只需要配置一次,后续所有定时任务都在我们业务代码进行控制 场景 我们有一个导入数据的定时
-
Python装饰器基础详解
装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象作为某一个函数的返回结果.相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用. 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自己编写新的装饰器的更多高级语法. 什么是装饰器 装饰是为函数和类指定管理代码的一种
-
Docker Compose 搭建简单的Python网络应用程序(步骤详解)
目录 前提条件 第1步:设置 第2步:创建一个Dockerfile 第3步:在Compose文件中定义服务 Web服务 Redis服务 第4步:用Compose构建和运行你的应用 第5步:编辑Compose文件以添加绑定挂载 第6步:用Compose重新构建并运行应用程序 第7步:更新应用程序 第8步:试验一些其他命令 在这个页面上,你可以建立一个简单的Python网络应用程序,运行在Docker Compose上.该应用使用Flask框架,并在Redis中维护一个点击计数器.虽然样本使用了Py
-
Python 装饰器使用详解
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用. 先来看一个简单例子: def now(): print('2017_7_29') 现在有一个新的需求,希望可以记录下函数的执行日志,于是在代码中添加日志代码: def now():
-
Python描述器descriptor详解
前面说了descriptor,这个东西其实和Java的setter,getter有点像.但这个descriptor和上文中我们开始提到的函数方法这些东西有什么关系呢? 所有的函数都可以是descriptor,因为它有__get__方法. 复制代码 代码如下: >>> def hello(): pass >>> dir(hello) ['__call__', '__class__', '__delattr__', '__dict__', '__doc__',
-
Python装饰器代码详解
目录 一.理解装饰器 二.装饰器原型 1.不带参数的装饰器 2.带参数的被装饰的函数 3.带参数的装饰器 4.使用类作为装饰器 5.使用对象作为装饰器 6.多层装饰器的嵌套 总结 一.理解装饰器 所有东西都是对象(函数可以当做对象传递) 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. def function_one(): print("测试函数") #可以将一个函数赋值给一个变量,比如 foo =function_one #这里没有在使用小括号,因
-
python爬虫中的url下载器用法详解
前期的入库筛选工作已经由url管理器完成了,整理的工作自然要由url下载器接手.当我们需要爬取的数据已经去重后,下载器的主要任务的是这些数据下载下来.所以它的使用也并不复杂,不过需要借助到我们之前所学过的一个库进行操作,相信之前的基础大家都学的很牢固.下面小编就来为大家介绍url下载器及其使用的方法. 下载器的作用就是接受URL管理器传递给它的一个url,然后把该网页的内容下载下来.python自带有urllib和urllib2等库(这两个库在python3中合并为urllib),它们的作用就是
-
Python 中闭包与装饰器案例详解
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 1.Python中一切皆对象 这恐怕是学习Python最有用的一句话.想必你已经知道Python中的list, tuple, dict等内置数据结构,当你执行: alist = [1, 2, 3] 时,你就创建了一个列表对象,并且用alist这个变量引用它: 当然你也可以自己定义一个类: class House(object): def __init__(self, are
随机推荐
- AngularJS实现进度条功能示例
- java中Cookie被禁用后Session追踪问题
- 如何访问大型机、小型机上的DB2 9数据服务器
- 写出高性能SQL语句的35条方法分析
- 老生常谈Java异常处理和设计(推荐)
- 仿百度输入框智能提示的js代码
- asp.net 分页存储过程实例剖析心得
- delphi 正弦曲线图
- Eclipse PHPEclipse 配置的具体步骤
- node.js集成百度UE编辑器
- MySQL学习笔记小结
- jquery选择器排除某个DOM元素的方法(实例演示)
- JavaScript高级程序设计 阅读笔记(十五) 浏览器中的JavaScript
- jQuery淡入淡出元素让其效果更为生动
- jquery+css实现绚丽的横向二级下拉菜单-附源码下载
- Linux环境下使用XFS文件系统
- 联众密码的逆向算法公布
- 详解Linux Centos7下安装Python的方法
- Google 统计图表(Flash)小插件
- 不想让浏览器运行javascript脚本的方法