一个定时器,用来做类似于crontab的工作


类型:Python,创建时间:Dec. 31, 2011, 9:50 a.m.

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/24/。

前几天写一个后台程序,定时查看一个URL的修改,本来想用crontab做的,后来想想就算了,因为python写起来更简单。于是我就实现了一个每小时(可配置)醒过来做一次操作的小小工具类。与threading的Timer不一样的是,它是单线程的。

class Timer:
    def __init__(self, waken_interval=1):
        self.waken_interval = waken_interval
        self.callbacks = []

    def setInterval(self,interval,func):
        self.callbacks.append({"interval" : interval, "func" : func, "counter" : 0})

    def sleep(self):
        time.sleep(self.waken_interval)
        for cb in self.callbacks:
            cb["counter"] += self.waken_interval

    def run(self, instantly=False):
        while True:
            if not instantly:
                self.sleep()
            for cb in self.callbacks:
                if cb["counter"] >= cb["interval"]:
                    try:
                        cb["func"]()
                    except:
                        pass
                    cb["counter"] = 0
                    if instantly:
                        self.sleep()

使用方法:

import sys
t=Timer()
t.setInterval(2, lambda : sys.stdout.write("5\n"))
t.setInterval(3, lambda : sys.stdout.write("7\n"))
t.run()

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/24/。


暂时还没有任何评论。


何不来发表一下您对本文的看法(使用Markdown语法,分段空两行):