docs: def _pop(self, block=True, timeout=None, left=False):
          """Removes and returns the an item from this GeventDeque.
  
          This is an internal method, called by the public methods
          pop() and popleft().
          """
          item  = None
          timer = None
          deque = self._deque
          empty = IndexError('pop from an empty deque')
  
          if block is False:
              if len(self._deque) > 0:
                  item = deque.popleft() if left else deque.pop()
              else:
                  raise empty
          else:
              try:
                  if timeout is not None:
                      timer = gevent.Timeout(timeout, empty)
                      timer.start()
  
                  while True:
                      self.notEmpty.wait()
                      if len(deque) > 0:
                          item = deque.popleft() if left else deque.pop()
                          break
              finally:
                  if timer is not None:
                      timer.cancel()
  
          if len(deque) == 0:
              self.notEmpty.clear()
  
          return item