code: def deferred_call(self, callback, *args, **kwargs):
          
          loop = self.loop
          r = loop.callLater(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"