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 内建函数和保留字详解
Oct 15 Python
django 将model转换为字典的方法示例
Oct 16 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
Oct 22 Python
python基于SMTP协议发送邮件
May 31 Python
python django model联合主键的例子
Aug 06 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
Python SSL证书验证问题解决方案
Jan 13 Python
Django使用rest_framework写出API
May 21 Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
python迷宫问题深度优先遍历实例
Jun 20 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校验ISBN码的函数代码
2011/01/17 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
CK美国官网:Calvin Klein
2016/08/26 全球购物
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
军人违纪检讨书
2014/02/04 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
公司门卫岗位职责
2014/03/15 职场文书
气象学专业个人求职信
2014/03/15 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
教师工作表现评语
2014/12/31 职场文书
Oracle中日期的使用方法实例
2022/07/07 Oracle