server/utils.py
branchstable
changeset 6381 c9eed5037223
parent 6128 fbb8398f80dc
child 6427 c8a5ac2d1eaa
equal deleted inserted replaced
6375:df4fd2a1b0e7 6381:c9eed5037223
   115     sconfig = Configuration(options=SOURCE_TYPES[sourcetype].options)
   115     sconfig = Configuration(options=SOURCE_TYPES[sourcetype].options)
   116     sconfig.adapter = sourcetype
   116     sconfig.adapter = sourcetype
   117     sconfig.input_config(inputlevel=inputlevel)
   117     sconfig.input_config(inputlevel=inputlevel)
   118     return sconfig
   118     return sconfig
   119 
   119 
       
   120 _MARKER=object()
       
   121 def func_name(func):
       
   122     name = getattr(func, '__name__', _MARKER)
       
   123     if name is _MARKER:
       
   124         name = getattr(func, 'func_name', _MARKER)
       
   125     if name is _MARKER:
       
   126         name = repr(func)
       
   127     return name
   120 
   128 
   121 class LoopTask(object):
   129 class LoopTask(object):
   122     """threaded task restarting itself once executed"""
   130     """threaded task restarting itself once executed"""
   123     def __init__(self, interval, func, args):
   131     def __init__(self, interval, func, args):
   124         if interval <= 0:
   132         if interval <= 0:
   125             raise ValueError('Loop task interval must be > 0 '
   133             raise ValueError('Loop task interval must be > 0 '
   126                              '(current value: %f for %s)' % \
   134                              '(current value: %f for %s)' % \
   127                              (interval, func.__name__))
   135                              (interval, func_name(func)))
   128         self.interval = interval
   136         self.interval = interval
   129         def auto_restart_func(self=self, func=func, args=args):
   137         def auto_restart_func(self=self, func=func, args=args):
   130             try:
   138             try:
   131                 func(*args)
   139                 func(*args)
   132             finally:
   140             finally:
   133                 self.start()
   141                 self.start()
   134         self.func = auto_restart_func
   142         self.func = auto_restart_func
   135         self.name = func.__name__
   143         self.name = func_name(func)
   136 
   144 
   137     def __str__(self):
   145     def __str__(self):
   138         return '%s (%s seconds)' % (self.name, self.interval)
   146         return '%s (%s seconds)' % (self.name, self.interval)
   139 
   147 
   140     def start(self):
   148     def start(self):
   160                 func()
   168                 func()
   161             finally:
   169             finally:
   162                 self.running_threads.remove(self)
   170                 self.running_threads.remove(self)
   163         Thread.__init__(self, target=auto_remove_func)
   171         Thread.__init__(self, target=auto_remove_func)
   164         self.running_threads = running_threads
   172         self.running_threads = running_threads
   165         self._name = target.__name__
   173         self._name = func_name(target)
   166 
   174 
   167     def start(self):
   175     def start(self):
   168         self.running_threads.append(self)
   176         self.running_threads.append(self)
   169         self.daemon = True
   177         self.daemon = True
   170         Thread.start(self)
   178         Thread.start(self)