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实现方法
Nov 18 Python
Python实现获取某天是某个月中的第几周
Feb 11 Python
EM算法的python实现的方法步骤
Jan 02 Python
Django 路由控制的实现代码
Nov 08 Python
Python笔试面试题小结
Sep 07 Python
给我一面国旗 python帮你实现
Sep 30 Python
python实现从wind导入数据
Dec 03 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
Anaconda的安装及其环境变量的配置详解
Apr 22 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
利用Python如何实时检测自身内存占用
May 09 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
Jun 10 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框架的性能
2008/01/10 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
js打印纸函数代码(递归)
2010/06/18 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
jQuery实现跨域
2015/02/03 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
JS实现吸顶特效
2020/01/08 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
python实现排序算法
2014/02/14 Python
Python中动态创建类实例的方法
2017/03/24 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
深入浅析Python的类
2018/06/22 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
联想C++笔试题
2012/06/13 面试题
证婚人经典证婚词
2014/01/09 职场文书
贷款委托书范本
2014/04/08 职场文书
书香校园建设方案
2014/05/02 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
民事和解协议书格式
2014/11/29 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
2016年少先队活动总结
2016/04/06 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
Python 制作自动化翻译工具
2021/04/25 Python
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android