title: Fast and Precise Python Repeating Timer
body: <p>I need to send repeating messages from a list quickly and precisely. One list needs to send the messages every 100ms, with a +/- 10ms window.  I tried using the code below, but the problem is that the timer waits the 100ms, and then all the computation needs to be done, making the timer fall out of the acceptable window.</p>
  
  <p>Simply decreasing the wait is a messy, and unreliable hack.  The there is a Lock around the message loop in the event the list gets edited during the loop.  </p>
  
  <p>Thoughts on how to get python to send messages consistently around 100ms?  Thanks</p>
  
  <pre><code>from threading import Timer
  from threading import Lock
  
  class RepeatingTimer(object):
      def __init__(self,interval, function, *args, **kwargs):
          super(RepeatingTimer, self).__init__()
          self.args = args
          self.kwargs = kwargs
          self.function = function
          self.interval = interval
          self.start()
  
      def start(self):
          self.callback()
  
      def stop(self):
          self.interval = False
  
      def callback(self):
          if self.interval:
              self.function(*self.args, **self.kwargs)
              Timer(self.interval, self.callback, ).start()
  
  def loop(messageList):
      listLock.acquire()
      for m in messageList:
          writeFunction(m)
      listLock.release()
  
  
  MESSAGE_LIST = [] #Imagine this is populated with the messages
  listLock = Lock()
  rt = RepeatingTimer(0.1,loop,MESSAGE_LIST)
  #Do other stuff after this
  </code></pre>
  
  <p>I do understand that the writeFunction will cause some delay, but not more than the 10ms allowed.  I essentially need to call the function every 100ms for each message.  The messagelist is small, usually less than elements.  </p>
  
  <p>The next challenge is to have this work with every 10ms, +/-1ms :P</p>