server/utils.py
branchstable
changeset 7573 c8f8762c986d
parent 6765 b922e3a817e9
child 7815 2a164a9cf81c
equal deleted inserted replaced
7572:a554010417ce 7573:c8f8762c986d
   126             raise ValueError('Loop task interval must be > 0 '
   126             raise ValueError('Loop task interval must be > 0 '
   127                              '(current value: %f for %s)' % \
   127                              '(current value: %f for %s)' % \
   128                              (interval, func_name(func)))
   128                              (interval, func_name(func)))
   129         self.interval = interval
   129         self.interval = interval
   130         def auto_restart_func(self=self, func=func, args=args):
   130         def auto_restart_func(self=self, func=func, args=args):
       
   131             restart = True
   131             try:
   132             try:
   132                 func(*args)
   133                 func(*args)
   133             except:
   134             except Exception:
   134                 logger = logging.getLogger('cubicweb.repository')
   135                 logger = logging.getLogger('cubicweb.repository')
   135                 logger.exception('Unhandled exception in LoopTask %s', self.name)
   136                 logger.exception('Unhandled exception in LoopTask %s', self.name)
   136                 raise
   137                 raise
       
   138             except BaseException:
       
   139                 restart = False
   137             finally:
   140             finally:
   138                 self.start()
   141                 if restart:
       
   142                     self.start()
   139         self.func = auto_restart_func
   143         self.func = auto_restart_func
   140         self.name = func_name(func)
   144         self.name = func_name(func)
   141 
   145 
   142     def __str__(self):
   146     def __str__(self):
   143         return '%s (%s seconds)' % (self.name, self.interval)
   147         return '%s (%s seconds)' % (self.name, self.interval)