server/utils.py
branchstable
changeset 5606 61b28589d33f
parent 5581 0aae5216f99e
parent 5602 277b15d6d3ed
child 6128 fbb8398f80dc
equal deleted inserted replaced
5599:be94157bd754 5606:61b28589d33f
   121 
   121 
   122 
   122 
   123 class LoopTask(object):
   123 class LoopTask(object):
   124     """threaded task restarting itself once executed"""
   124     """threaded task restarting itself once executed"""
   125     def __init__(self, interval, func, args):
   125     def __init__(self, interval, func, args):
       
   126         if interval <= 0:
       
   127             raise ValueError('Loop task interval must be > 0 '
       
   128                              '(current value: %f for %s)' % \
       
   129                              (interval, func.__name__))
   126         self.interval = interval
   130         self.interval = interval
   127         def auto_restart_func(self=self, func=func, args=args):
   131         def auto_restart_func(self=self, func=func, args=args):
   128             try:
   132             try:
   129                 func(*args)
   133                 func(*args)
   130             finally:
   134             finally:
   135     def __str__(self):
   139     def __str__(self):
   136         return '%s (%s seconds)' % (self.name, self.interval)
   140         return '%s (%s seconds)' % (self.name, self.interval)
   137 
   141 
   138     def start(self):
   142     def start(self):
   139         self._t = Timer(self.interval, self.func)
   143         self._t = Timer(self.interval, self.func)
       
   144         self._t.setName('%s-%s[%d]' % (self._t.getName(), self.name, self.interval))
   140         self._t.start()
   145         self._t.start()
   141 
   146 
   142     def cancel(self):
   147     def cancel(self):
   143         self._t.cancel()
   148         self._t.cancel()
   144 
   149