最近使用python处理计划调度方面的工作,主要是事件的延期执行。
总结有三种方式。
1. 使用wx.Timer. 当然前提是使用wxpython进行编程。
这种方式的好处是,wx.Timer默认支持重复执行。但是有时间限制,设定轮循(延迟)时间最好在1ms以内,最大不能超过1s。超过会引起什么样的结果, 我尚未测试。
2. 使用sched模块。
该模块是python 2.5, 2.6内置模块,使用比较简单, 而且可以配置多个schedule。
但是该模块只能在单线程中使用, 当schedule中的事件队列(event queue)非空时,就不能为该scheduler添加新的事件。
3. 使用threading模块的Timer class。
使用Timer, 就可以避免sched模块的缺点。因为每一个事件,都是使用一个Timer实例进行管理,也就是一个单独的线程存在,这样就避免了不能动态添加scheduler的问题。
可以参考:http://docs.python.org/library/sched.html
1. 使用sched.scheduler.
2. 使用threading.Timer.
二者区别:
1中只创建一个scheduler对象, 而将需要调度的任务放入该对象的queue中, 当run这个scheduler时,它会将queue中的任务全部按照时间启动,在所有的任务启动之前,queue中不能放入新的任务。
2中则对每一个任务创建一个Timer实例, 想动态添加任务时只需创建一个新的Timer实例即可。
我在想为什么1中不为每个任务创建一个scheduler呢,那样也避免了这种缺陷。
估计是scheduler比较“重“, 至少它需要维护一个event queue,这样系统开销就比较大,可能还有其他方面的问题,有时间看看scheduler的源码,分析一下。