Example #1
0
 def put(self, item, block=True, timeout=None):
     # Behaves the same way as default except that instead of raising Full,
     # it just pushes the item on to the deque anyway, throwing away old
     # frames.
     self.not_full.acquire()
     try:
         if self.maxsize > 0 and block:
             if timeout is None:
                 while self._qsize() == self.maxsize:
                     self.not_full.wait()
             elif timeout < 0:
                 raise ValueError("'timeout' must be a non-negative number")
             else:
                 endtime = Queue._time() + timeout
                 while self._qsize() == self.maxsize:
                     remaining = endtime - Queue._time()
                     if remaining <= 0.0:
                         break
                     self.not_full.wait(remaining)
         self._put(item)
         self.unfinished_tasks += 1
         self.not_empty.notify()
     finally:
         self.not_full.release()