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代码(逐级优化)
May 25 Python
理解Python中的With语句
Mar 18 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
Python unittest单元测试框架总结
Sep 08 Python
详解Python 正则表达式模块
Nov 05 Python
pandas分区间,算频率的实例
Jul 04 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
python3实现单目标粒子群算法
Nov 14 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
django queryset相加和筛选教程
May 18 Python
Python如何将模块打包并发布
Aug 30 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 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
第一节--面向对象编程
2006/11/16 PHP
php zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
JavaScript的继承实现小结
2017/05/07 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
使用Python神器对付12306变态验证码
2016/01/05 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
django如何连接已存在数据的数据库
2018/08/14 Python
Python基本socket通信控制操作示例
2019/01/30 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
智能电子应届生求职信
2013/11/10 职场文书
模具专业求职信
2014/06/26 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
李白故里导游词
2015/02/12 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
一行Python命令实现批量加水印
2022/04/07 Python
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python