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中操作文件之truncate()方法的使用教程
May 25 Python
Python实现读取并保存文件的类
May 11 Python
python爬虫之百度API调用方法
Jun 11 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
python处理csv中的空值方法
Jun 22 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
如何使用Python标准库进行性能测试
Jun 25 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
Android Q之气泡弹窗的实现示例
Jun 23 Python
python输出结果刷新及进度条的实现操作
Jul 13 Python
python中Mako库实例用法
Dec 31 Python
Python+OpenCV实现在图像上绘制矩形
Mar 21 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的curl开启问题探讨
2014/04/08 PHP
学习PHP session的传递方式
2016/06/15 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
angular4自定义组件详解
2017/09/28 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
vue项目引入字体.ttf的方法
2018/09/28 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
python简单实现刷新智联简历
2016/03/30 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python retrying模块的使用方法详解
2019/09/25 Python
python和JavaScript哪个容易上手
2020/06/23 Python
Python如何读写字节数据
2020/08/05 Python
大学生实习期自我评价范文
2013/10/03 职场文书
市场营销管理制度
2014/01/29 职场文书
无偿献血倡议书
2014/04/14 职场文书
我的梦中国梦演讲稿
2014/04/23 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
资产移交协议书
2016/03/24 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
Golang中异常处理机制详解
2021/06/08 Golang
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript