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 相关文章推荐
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
Python数据类型之Set集合实例详解
May 07 Python
python多线程下信号处理程序示例
May 31 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
Python pip install如何修改默认下载路径
Apr 29 Python
Python中常用的os操作汇总
Nov 05 Python
基于 Python 实践感知器分类算法
Jan 07 Python
使用tkinter实现三子棋游戏
Feb 25 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下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
农历与西历对照
2006/09/06 Javascript
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
理解javascript异步编程
2016/01/27 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python常用正则表达式符号浅析
2014/08/13 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
让python在hadoop上跑起来
2016/01/27 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
仓库班组长岗位职责
2013/12/12 职场文书
经典演讲稿范文
2013/12/30 职场文书
平安建设实施方案
2014/03/19 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
家长反馈意见及建议
2015/06/03 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python