python timer 死掉_Python定时事件 Timer & sched

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

先说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 importTimer4 importsched5

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

7 schedule=sched.scheduler(time.time,time.sleep)8

9 #被周期性调度触发的函数

10 defexecute_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 importTimer4

5 defprint_time():6 print "Current time is :", time.time()7 Timer(5,print_time,()).start()8

9 defprint_sometime():10 Timer(5,print_time,()).start()11

12 print_sometime()

View Code

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值