Python定时事件 Timer & sched

 

  我们经常需要定时的执行某一个任务,在C/C++ 等语言中我们可以使用定时器,但是在Python中,标准库给我们提供了两种方式TimerSched

 

  先说sched模块,准确的说,它是一个调度(延时处理机制),每次想要定时执行某任务都必须写入一个调度。使用步骤如下:

  1. 生成调度器

    s = sched.scheduler(time.time,time.sleep)

    第一个参数是一个可以返回时间戳的函数,第二个参数是指未达到定时时间时阻塞函数。

  2. 加入调度事件

    其实有enter、enterabs等等

    s.enter(a,b,c,d);

    四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,给他的参数

  3. 运行调度器

    s.run()

    然而:sched模块不是循环的,一次调度被执行后就结束了,如果想再执行,需要再次enter。

 1 #!/usr/bin/env python 
 2 # -*- coding:utf-8 -*- 
 3 from threading import Timer 
 4 import sched
 5 
 6 # 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
 7 schedule=sched.scheduler(time.time,time.sleep)
 8 
 9 # 被周期性调度触发的函数
10 def execute_command(cmd, inc): 
11     os.system(cmd) 
12     #schedule.enter(inc, 0, execute_command, (cmd, inc)) 
13 
14 def main(cmd, inc=60):
15     # enter四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数, 
16     # 给该触发函数的参数(tuple形式)
17     schedule.enter(0, 0, execute_command, (cmd, inc)) 
18     schedule.run() 
19 
20 main("netstat -anp |  grep tcp", 60)

  注意:1. 如果以上函数只能执行一次,如果需要多次循环执行,需要再执行函数中再次enter。2. 如果执行函数只需要一个参数,输入时以(param1,)形式,逗号需要。如果不需要参数则,只需要()即可。

  再来说Timer。

  Timer类,也不是默认循环调用的,如果需要循环调用,方法与Sched类似,多次start。

  Timer类的使用方法如下

  

 1 #!/usr/bin/env python 
 2 # -*- coding:utf-8 -*- 
 3 from threading import Timer 
 4 
 5 def print_time():
 6     print "Current time is : ", time.time()
 7     Timer(5,print_time,()).start()
 8 
 9 def print_sometime():
10     Timer(5,print_time,()).start()
11 
12 print_sometime()
View Code

  

  另外,关于timer 和Sched的官方解释为:https://docs.python.org/2/library/sched.html

 

转载于:https://www.cnblogs.com/nhua68918/p/7285888.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值