docs: def get(self, loop=None):
          """Coroutine that waits for a heap to become available and returns it."""
          self._clear_done_waiters()
          if not self._waiters:
              # If something is available directly, we can avoid going back to
              # the scheduler
              try:
                  heap = self.get_nowait()
              except spead2.Empty:
                  pass
              else:
                  # Give the event loop a chance to run. This ensures that a
                  # heap-processing loop cannot live-lock the event loop.
                  yield
                  raise Return(heap)
  
          if loop is None:
              loop = self._loop
          waiter = trollius.Future(loop=loop)
          self._waiters.append(waiter)
          self._start_listening()
          heap = (yield From(waiter)).pop()
          raise Return(heap)