'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).'

def get(self, block=True, timeout=None):

    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:
            endtime = (_time() + timeout)
            while (not self._qsize()):
                remaining = (endtime - _time())
                if (remaining <= 0.0):
                    raise Empty
                self.not_empty.wait(remaining)
        item = self._get()
        self.not_full.notify()
        return item
    finally:
        self.not_empty.release()
