docs: def get(self, block=True, timeout=None):
          """Remove and return an item from the queue.
  
          If optional args 'block' is true and 'timeout' is None (the default),
          block if necessary until an item is available. If 'timeout' is
          a positive number, it blocks at most 'timeout' seconds and raises
          the Empty exception if no item was available within that time.
          Otherwise ('block' is false), return an item if one is immediately
          available, else raise the Empty exception ('timeout' is ignored
          in that case).
          """
          self.not_empty.acquire()
          try:
              if not block:
                  if not self._qsize():
                      raise Empty
              elif timeout is None:
                  while not self._qsize():
                      self.not_empty.wait()
              elif timeout < 0:
                  raise ValueError("'timeout' must be a positive number")
              else:
                  if not self._qsize():
                      self.not_empty.wait(timeout)
                      if not self._qsize():
                          raise Empty
              item = self._get()
              self.not_full.notify()
              return item
          finally:
              self.not_empty.release()