code: def timed_call(self, ms, callback, *args, **kwargs):
          
          loop = self.loop
          r = loop.callLater(ms/1000.0, callback, *args, **kwargs)
          loop.wakeUp()
          return r
docs: We have to wake up the reactor after every call because
          it may calculate a long delay where it can sleep which causes events 
          that happen during this period to seem really slow as they do not get 
          processed until after the reactor "wakes up"