code: def pop(self):
          
          self.updateQueue()
  
          # If our buffer is underflowing, request more Futures
          if self.timelen(self) < self.lowwatermark:
              self.requestFuture()
  
          # If an unmovable Future is ready to be executed, return it
          if len(self.ready) != 0:
              return self.ready.popleft()
  
          # Then, use Futures in the movable queue
          elif len(self.movable) != 0:
              return self.movable.popleft()
          else:
              # Otherwise, block until a new task arrives
              self.lastStatus = time.time()
              while len(self) == 0:
                  # Block until message arrives
                  self.askForPreviousFutures()
                  self.socket._poll(POLLING_TIME)
                  self.updateQueue()
              if len(self.ready) != 0:
                  return self.ready.popleft()
              elif len(self.movable) != 0:
                  return self.movable.popleft()
docs: Pop the next future from the queue;
          in progress futures have priority over those that have not yet started;
          higher level futures have priority over lower level ones;