def test_get_put_nomaxsize(): q = BlockingQueue() assert q.is_empty assert len(q) == 0 items = range(20) for i in items: q.put(i) assert len(q) == 1 assert q.get() == i assert len(q) == 0
def test_multiple_threads(iterations=120, num_consumers=30): q = BlockingQueue(iterations) woken_thread_event = Event() threads = [] times = [] def _get(iters, ev): start = time() for _i in xrange(iters): q.get() ev.set() woken_thread_event.set() end = time() times.append(end-start) iters_per_consumer = iterations/num_consumers for _i in range(num_consumers): ev = Event() tc = Thread(target=_get, args=(iters_per_consumer, ev)) tc.setDaemon(1) tc.event = ev threads.append(tc) for t in threads: t.start() assert not times for i in xrange(iterations): q.put(i) woken_thread_event.wait(1) woken_thread_event.clear() woken_threads = [t for t in threads if t.event.isSet()] assert len(woken_threads) == 1, woken_threads woken_threads[0].event.clear() for t in threads: t.join(1) assert not t.isAlive() assert len(times) == len(threads)
def test_maxsize(maxsize=5): q = BlockingQueue(maxsize=maxsize) assert q.maxsize == maxsize for i in xrange(maxsize): assert not q.is_full q.put(i) assert q.is_full assert len(q.getmany()) == maxsize assert not q.is_full q.putmany(range(maxsize)) assert q.is_full q.putleft(99, respectmaxsize=0) assert q.is_full assert len(q) == maxsize+1 assert q.get() == 99 assert q.is_full assert q._fsema.locked() # pylint: disable-msg=W0212 assert len(q.getmany()) == maxsize assert not q.is_full assert q.is_empty