code: def waiters(self, path=None):
          
  
          context = self._waiters
  
          if path is None:
              path = []
  
          for key in path:
              context = context[key]
  
          if self._LEAF in context:
              for future in context[self._LEAF]:
                  yield (path, future)
  
          for key in context:
              if key is self._LEAF:
                  continue
  
              yield from self.waiters(path=path + [key])
docs: Iterate over all waiters.
  
          This method will return the waiters in unspecified order
          including the future or callback object that will be invoked
          and a list containing the keys/value that are being matched.
  
          Yields:
              list, future or callable