在发现Python自身的API在这方面没有很好支持这种情况下,想要使用Timer功能的话,除了第三方的模块外,还可以通过使用标准库为我们提供的sched模块和Timer类。这两个类不能算是真正的Timer,只能算是用来现实Timer的工具类。

不论在客户端应用程序还是服务器组件(包括窗口服务)定时器通常扮演一个重要的角色。写一个高效的定时器驱动型可管理代码要求对程序流程有一个清晰的理解及掌握,NET线程模型的精妙之处。.NET框架类库提供了三种不同的定时器类:System.Windows.Forms.Timer, System.Timers.Timer, 和System.Threading.Timer。每个类为不同的场合进行设计和优化。

python timeloop 每天0点执行 python timer_模块外

我们经常需要定时的执行某个任务,在Linux下我们有强大的crontab,但是在Python这个粒度(定时执行函数),如何处理呢?除了第三方的模块外,标准库为我们提供了sched模块和Timer类。

下面将会对这两种类如何实现Timer做个简单的演示:

一、sched

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

使用步骤如下:

(1)生成调度器:s = sched.scheduler(time.time,time.sleep)

第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。可以说sched模块设计者是“在下很大的一盘棋”,比如第一个函数可以是自定义的一个函数,不一定是时间戳,第二个也可以是阻塞socket等。

(2)加入调度事件

其实有enter、enterabs等等,我们以enter为例子。

s.enter(x1,x2,x3,x4)

四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,给他的参数(注意:一定要以tuple给如,如果只有一个参数就(xx,))

(3)运行

s.run()

注意sched模块不是循环的,一次调度被执行后就Over了,如果想再执行,请再次enter

python timeloop 每天0点执行 python timer_System_02

二、Timer

Timer类也是一次性触发的,思路和sched大概差不多。

python timeloop 每天0点执行 python timer_模块外_03

虽然说上面的两种现实看起来都很不专业,但是如果不借助第三方的库,可能也只能这样了。

通过上面的简洁的教程,编制python定时器也不是那么难学,相信你一定学会了python定时器的使用方法,赶紧用起来吧。