python BlockingScheduler定时任务及其他方式的实现


Posted in Python onSeptember 19, 2019

本文介绍了python BlockingScheduler定时任务及其他方式的实现,具体如下:

#BlockingScheduler定时任务
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
首先看看周一到周五定时执行任务
# 输出时间
def job():
  print(datetime.now().strtime("%Y-%m-%d %H:%M:%S"))
# BlockingScheduler
scheduler = BlockingScheduler()
scheduler.add_job(job, "cron", day_of_week="1-5", hour=6, minute=30)
schduler.start()


scheduler.add_job(job, 'cron', hour=1, minute=5)
hour =19 , minute =23  这里表示每天的19:23 分执行任务
hour ='19', minute ='23'  这里可以填写数字,也可以填写字符串
hour ='19-21', minute= '23'  表示 19:23、 20:23、 21:23 各执行一次任务

#每300秒执行一次
scheduler .add_job(job, 'interval', seconds=300)

#在1月,3月,5月,7-9月,每天的下午2点,每一分钟执行一次任务
scheduler .add_job(func=job, trigger='cron', month='1,3,5,7-9', day='*', hour='14', minute='*')

# 当前任务会在 6、7、8、11、12 月的第三个周五的 0、1、2、3 点执行
scheduler .add_job(job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')

#从开始时间到结束时间,每隔俩小时运行一次
scheduler .add_job(job, 'interval', hours=2, start_date='2018-01-10 09:30:00', end_date='2018-06-15 11:00:00')

#自制定时器
 from datetime import datetime
 import time
 # 每n秒执行一次
 def timer(n):
   while True:
     print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
     time.sleep(n)

timer(5)

Python下实现定时任务的方式有很多种方式。

循环sleep:

这是一种最简单的方式,在循环里放入要执行的任务,然后sleep一段时间再执行。缺点是,不容易控制,而且sleep是个阻塞函数。

def timer(n):
  '''
  每n秒执行一次
  '''
  while True: 
    print time.strftime('%Y-%m-%d %X',time.localtime()) 
    yourTask() # 此处为要执行的任务 
    time.sleep(n)

threading的Timer:

threading模块中的Timer能够帮助实现定时任务,而且是非阻塞的。

比如3秒后打印helloworld:

def printHello():
  print "hello world"
 
 
Timer(3, printHello).start()

比如每3秒打印一次helloworld:

def printHello():
  print "Hello World"
  t = Timer(2, printHello)
  t.start()
 
 
if __name__ == "__main__":
  printHello()

使用sched模块:

sched是一种调度(延时处理机制)。

# -*- coding:utf-8 -*-
# use sched to timing
import time
import os
import sched
 
 
# 初始化sched模块的scheduler类
# 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
schedule = sched.scheduler(time.time, time.sleep)
 
 
# 被周期性调度触发的函数
def execute_command(cmd, inc):
  '''
  终端上显示当前计算机的连接情况
  '''
  os.system(cmd)
  schedule.enter(inc, 0, execute_command, (cmd, inc))
 
 
def main(cmd, inc=60):
  # enter四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,
  # 给该触发函数的参数(tuple形式)
  schedule.enter(0, 0, execute_command, (cmd, inc))
  schedule.run()
 
 
# 每60秒查看下网络连接情况
if __name__ == '__main__':
  main("netstat -an", 60)

使用定时框架APScheduler:

APScheduler是基于Quartz的一个Python定时任务框架。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。

这个现在还没自己尝试过,等过段时间用了再来补充。

使用windows的定时任务:

这里可以将所需要的Python程序打包成exe文件,然后在windows下设置定时执行。

使用Linux的定时任务(Crontab):

在Linux下可以很方便的借助Crontab来设置和运行定时任务。进入Crontab文件编辑页面,设置时间间隔,使用一些shell命令来运行bash脚本或者是Python脚本,保存后Linux会自动按照设定的时间来定时运行程序。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Python实现对比不同字体中的同一字符的显示效果
Apr 23 Python
Python操作csv文件实例详解
Jul 31 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
python pygame模块编写飞机大战
Nov 20 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
Mar 24 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
python实现简单成绩录入系统
Sep 19 #Python
淘宝秒杀python脚本 扫码登录版
Sep 19 #Python
基于python的selenium两种文件上传操作实现详解
Sep 19 #Python
Python分割训练集和测试集的方法示例
Sep 19 #Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 #Python
PHP统计代码行数的小代码
Sep 19 #Python
Python实现代码统计工具
Sep 19 #Python
You might like
php 地区分类排序算法
2013/07/01 PHP
php中adodbzip类实例
2014/12/08 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
javascript 打印页面代码
2009/03/24 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python实用代码片段收集贴
2015/06/03 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
python开发入门——set的使用
2020/09/03 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
护士自我鉴定
2013/10/23 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
2015双创工作总结
2015/07/24 职场文书