Python 定时任务

最近学习到了 python 中两种开启定时任务的方法,和大家分享一下心得。

  • sched.scheduler()
  • threading.Timer()

sched 定时任务

使用sched的套路如下:

s = sched.scheduler(time.time, time.sleep)
s.enter(delay, priority, func1, (arg1, arg2, ...))
s.enter(delay, priority, func2, (arg1, arg2, arg3, ...))
s.run()

第一步新建一个调度器;

第二步添加任务,可以添加多个任务;

第三步让调度器开始运行。

第二步各参数含义:

  • delay 相对于调度器添加这个任务时刻的延时,以秒为单位;
  • priority 优先级,数字越小优先级越高;
  • func1 任务函数
  • (arg1, arg2, ...) 任务函数的参数
import time
import sched# 第一个工作函数
# 第二个参数 @starttime 表示任务开始的时间
# 很明显参数在建立这个任务的时候就已经传递过去了,至于任务何时开始执行就由调度器决定了
def worker(msg, starttime):print u"任务执行的时刻", time.time(), "传达的消息是", msg, '任务建立时刻', starttime# 创建一个调度器示例
# 第一参数是获取时间的函数,第二个参数是延时函数
print u'----------  两个简单的例子  -------------'
print u'程序启动时刻:', time.time()
s = sched.scheduler(time.time, time.sleep)
s.enter(1, 1, worker, ('hello', time.time()))
s.enter(3, 1, worker, ('world', time.time()))
s.run()  # 这一个 s.run() 启动上面的两个任务
print u'睡眠2秒前时刻:', time.time()
time.sleep(2)
print u'睡眠2秒结束时刻:', time.time()# 重点关注下面2个任务,建立时间,启动时间
# 2个任务的建立时间都很好计算,但有没有发现 "hello world [3]" 的启动时间比建立时间晚 13 秒,
# 这不就是2个 sleep 的总延时吗?所以说启动时间并不一定就是 delay 能指定的,还需要看具体的程序环境,
# 如果程序堵塞的很厉害,已经浪费了一大段的时间还没有到 scheduler 能调度这个任务,当 scheduler 能调度这个
# 任务的时候,发现 delay 已经过去了, scheduler 为了弥补“罪过”,会马上启动这个任务。# 任务 "hello world [15]" 就是一个很好的例子,正常情况下,程序没有阻塞的那么厉害,在scheduler 能调度这个任务的时候
# 发现 delay 还没到就等待,如果 delay 时间到了就可以在恰好指定的延时调用这个任务。
print u'\n\n----------  两个复杂的例子  -------------'
s.enter(3, 1, worker, ('hello world [3]', time.time()))
print u'睡眠7秒前时刻:', time.time()
time.sleep(7)
print u'睡眠7秒结束时刻:', time.time()s.enter(15, 1, worker, ('hello world [15]', time.time()))
print u'睡眠6秒前时刻:', time.time()
time.sleep(6)
print u'睡眠6秒结束时刻:', time.time()s.run() # 过了2秒之后,启动另外一个任务print u'程序结束时刻', time.time()
----------  两个简单的例子  -------------
程序启动时刻: 1481731389.4
任务执行的时刻 1481731390.4 传达的消息是 hello 任务建立时刻 1481731389.4
任务执行的时刻 1481731392.41 传达的消息是 world 任务建立时刻 1481731389.4
睡眠2秒前时刻: 1481731392.41
睡眠2秒结束时刻: 1481731394.41----------  两个复杂的例子  -------------
睡眠7秒前时刻: 1481731394.41
睡眠7秒结束时刻: 1481731401.42
睡眠6秒前时刻: 1481731401.42
睡眠6秒结束时刻: 1481731407.42
任务执行的时刻 1481731407.42 传达的消息是 hello world [3] 任务建立时刻 1481731394.41
任务执行的时刻 1481731416.43 传达的消息是 hello world [15] 任务建立时刻 1481731401.42
程序结束时刻 1481731416.43

自调任务1

任务快结束时利用 scheduler 又重新调用自己让自己“活过来”。

# 计数器,一个循环任务,总共让自己执行3次
total = 0
# 第二个工作函数,自调任务,自己开启定时并启动。
def worker2(msg, starttime):global totaltotal += 1print u'当前时刻:', time.time(), '消息是:', msg, ' 启动时间是:', starttime# 只要没有让自己调用到第3次,那么继续重头开始执行本任务if total < 3:# 这里的delay 可以重新指定s.enter(5, 2, worker2, ('perfect world %d' % (total), time.time()))s.run()print u'程序开始时刻:', time.time()
# 开启自调任务
s.enter(5, 2, worker2, ('perfect world %d' % (total), time.time()))
s.run()
print u'程序结束时刻:', time.time()
程序开始时刻: 1481731439.42
当前时刻: 1481731444.43 消息是: perfect world 0  启动时间是: 1481731439.42
当前时刻: 1481731449.44 消息是: perfect world 1  启动时间是: 1481731444.43
当前时刻: 1481731454.44 消息是: perfect world 2  启动时间是: 1481731449.44
程序结束时刻: 1481731454.44

Threading.Timer() 定时任务

from threading import Timer
import timedef func(msg, starttime):print u'程序启动时刻:', starttime, '当前时刻:', time.time(), '消息内容 --> %s' % (msg)# 下面的两个语句和上面的 scheduler 效果一样的
Timer(5, func, ('hello', time.time())).start()
Timer(3, func, ('world', time.time())).start()
程序启动时刻: 1481731467.28 当前时刻: 1481731470.28 消息内容 --> world
程序启动时刻: 1481731467.28 当前时刻: 1481731472.28 消息内容 --> hello

循环任务2

利用 threading.Timer() 建立的自调任务

count = 0
def loopfunc(msg,starttime):global countprint u'启动时刻:', starttime, ' 当前时刻:', time.time(), '消息 --> %s' % (msg)count += 1if count < 3:Timer(3, loopfunc, ('world %d' % (count), time.time())).start()Timer(3, loopfunc, ('world %d' % (count), time.time())).start()
启动时刻: 1481731476.35  当前时刻: 1481731479.35 消息 --> world 0
启动时刻: 1481731479.35  当前时刻: 1481731482.35 消息 --> world 1
启动时刻: 1481731482.35  当前时刻: 1481731485.35 消息 --> world 2

转载于:https://www.cnblogs.com/LinTeX9527/p/6181523.html

python 定时任务相关推荐

  1. Python 定时任务框架 APScheduler

    Python定时任务:多种实现方法 Python 定时任务框架 APScheduler 详解 APScheduler官方文档 Git-hub examples 例子1:apscheduler.trig ...

  2. Python 定时任务的实现方式

    背景 目前所在的项目组需要经常执行一些定时任务,于是选择使用 Python 的定时器. Python 实现定时任务 循环 sleep 这种方式最简单,在循环里面放入要执行的任务,然后 sleep 一段 ...

  3. python定时任务:apscheduler的使用(还有一个celery~)

    APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时检测钓鱼网站的程序等等,都涉及到了关于定时任务的问题,第 ...

  4. python定时任务_Python定时任务(上)

    在项目中,我们可能遇到有定时任务的需求.其一:定时执行任务.例如每天早上 8 点定时推送早报.其二:每隔一个时间段就执行任务.比如:每隔一个小时提醒自己起来走动走动,避免长时间坐着.今天,我跟大家分享 ...

  5. python定时任务apschedule_APScheduler(python 定时任务框架)最简单使用教程

    有时候需要部署一些很简单的python定时任务,使用APScheduler是很好的选择.只需要简单的设置几个参数,就可以实现定时.定分甚至秒来跑. 第一步:用pip安装APScheduler pip ...

  6. python定时任务框架_Python定时任务框架APScheduler

    APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.基 ...

  7. python定时任务_Python 定时任务最佳实践

    背景 最近有个需求,需要实现一个定时或定期任务的功能,需要实现每月.每日.每时.一次性等需求,必须是轻量级不依赖其它额外组件,并能支持动态添加任务.由于当前任务信息保存在集群 ETCD 数据库中,因此 ...

  8. Python定时任务框架APScheduler

    2019独角兽企业重金招聘Python工程师标准>>> APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了 ...

  9. python定时任务之cron_Python定时任务框架APScheduler 3.0.3 Cron示例

    APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.基 ...

最新文章

  1. vim配置python代码提示,VIM配置成Python IDE
  2. 【转载】jQuery学习笔记
  3. emacs python_Emacs之Python编程环境配置 - elpy
  4. 深度| 每秒1.4亿次!再度刷新TPS记录的PolarDB如何应对双11“尖峰时刻”?
  5. linux 图片编辑 java_Java在Linux下 不能处理图形的解决办法 分享
  6. fcpx插件:50组唯美梦幻棱镜光晕效果预设MotionVFXmPrism
  7. [eclipse]Syntax error on token ;,{ expected after this token
  8. 微课|中学生可以这样学Python(例6.4):因数分解
  9. C#中使用反射遍历一个对象属性和值以及百分数
  10. CentOS6.5上增加中文字体库,确保前端WEB可以正常显示
  11. truffle console用法 总结
  12. mysql 中的bool值
  13. 析砂性土层php泥浆护壁,土未工程施工习题集2
  14. esxi6.7 vSAN 运行状况 控制器固件版本 控制器实用程序问题
  15. 第三阶段应用层——1.7 数码相册—电子书(4)—select支持多输入
  16. 微信公众账号开发教程(三) 实例入门:机器人(附源码) ——转自http://www.cnblogs.com/yank/p/3409308.html...
  17. Unity3d FingerGestures
  18. T00ls技术文章.rar
  19. 用mac系统怎么连宽带连接服务器吗,苹果电脑怎么连宽带_MAC系统怎么连接有线宽带-win7之家...
  20. Java面试知识学习(持续更新)

热门文章

  1. 【SICP练习】136 练习3.67
  2. 函数图像轻松画:教你用永中图象
  3. 静态属性和静态方法2 - C++快速入门22
  4. GDAL Data Model(转)
  5. c#有多少种可能导致写文件失败?
  6. “怀才不遇”与“怀才不孕”怎么办?
  7. IOS视频编辑功能详解上篇-添加水印
  8. 翻译:CREATE DATABASE语句
  9. perl 的基本数据类型
  10. 前端编程提高之旅(五)----写给大家看的css书