python中的定期计时器,周期较短

时间:2013-01-24 15:58:04

标签: python timer

使用Timer类并在callable中重新启动计时器,是在python中在后台运行周期性计时器的标准方法。

这有两个主要缺点:

  • 它不是真正的周期性:设置计时器,......
  • 为每个时段创建一个新主题

是否有Timer类的替代方案?我看一下sched类,但是在MainThread中运行会阻止它,并且不建议在多线程环境中运行它。

如何在python中使用高频周期定时器(100 ms周期),例如在收集批量数据以发送到数据库时定期清空文档队列?

1 个答案:

答案 0 :(得分:4)

我想出了以下替代方案:

import threading
import time

class PeriodicThread(StoppableThread):
    '''Similar to a Timer(), but uses only one thread, stops cleanly and exits when the main thread exits'''

    def __init__ (self, period, callable, *args, **kwargs):
        super(PeriodicThread, self).__init__()
        self.period   = period
        self.args     = args
        self.callable = callable
        self.kwargs   = kwargs
        self.daemon   = True

    def run(self):
        while not self.stopped():
            self.callable(*self.args, **self.kwargs)
            time.sleep(self.period)