def test_concurrent_consumers_single_producer(): num_threads = 100 num_items = 10 q = Queue() items = deque() def consumer(): @gen.coroutine def run(): for i in range(num_items): x = yield q.get() items.append(x) IOLoop(make_current=False).run_sync(run) consumers = [threading.Thread(target=consumer) for i in range(num_threads)] for c in consumers: c.start() for x in range(num_items * num_threads): yield q.put(x) for c in consumers: c.join() assert len(items) == num_items * num_threads assert set(items) == set(range(num_items * num_threads))
def test_concurrent_producers_single_consumer(): num_threads = 100 num_items = 10 q = Queue() def producer(i): @gen.coroutine def run(): for j in range(num_items): yield q.put((i, j)) IOLoop(make_current=False).run_sync(run) producers = [ threading.Thread(target=producer, args=(i, )) for i in range(num_threads) ] for p in producers: p.start() items = defaultdict(lambda: []) for x in range(num_items * num_threads): i, j = yield q.get() items[i].append(j) for v in items.values(): assert v == list(range(num_items)) for p in producers: p.join()
def test_concurrent_producers_single_consumer(): num_threads = 100 num_items = 10 q = Queue() def producer(i): @gen.coroutine def run(): for j in range(num_items): yield q.put((i, j)) IOLoop(make_current=False).run_sync(run) producers = [ threading.Thread(target=producer, args=(i,)) for i in range(num_threads) ] for p in producers: p.start() items = defaultdict(lambda: []) for x in range(num_items * num_threads): i, j = yield q.get() items[i].append(j) for v in items.values(): assert v == list(range(num_items)) for p in producers: p.join()
def test_concurrent_consumers_single_producer(): num_threads = 100 num_items = 10 q = Queue() items = deque() def consumer(): @gen.coroutine def run(): for i in range(num_items): x = yield q.get() items.append(x) IOLoop(make_current=False).run_sync(run) consumers = [ threading.Thread(target=consumer) for i in range(num_threads) ] for c in consumers: c.start() for x in range(num_items * num_threads): yield q.put(x) for c in consumers: c.join() assert len(items) == num_items * num_threads assert set(items) == set(range(num_items * num_threads))
def test_get_then_put(items): queue = Queue() got_futures = [] for i in range(len(items)): got_futures.append(queue.get()) for item in items: yield queue.put(item) got = yield got_futures assert got == items
def test_put_then_get_nowait(items): queue = Queue() for item in items: yield queue.put(item) got = [] for i in range(len(items)): got.append(queue.get_nowait()) assert got == items with pytest.raises(QueueEmpty): queue.get_nowait() future = queue.get() yield queue.put(42) assert 42 == (yield future)
def test_concurrent_producers_and_consumers(): num_threads = 100 num_items = 10 q = Queue() items = defaultdict(lambda: []) def producer(i): @gen.coroutine def run(): for j in range(num_items): yield q.put((i, j)) IOLoop(make_current=False).run_sync(run) def consumer(): @gen.coroutine def run(): for x in range(num_items): i, j = yield q.get() items[i].append(j) IOLoop(make_current=False).run_sync(run) num_producers = int(num_threads / 2) threads = [ threading.Thread(target=producer, args=(i, )) for i in range(num_producers) ] + [ threading.Thread(target=consumer) for i in range(num_threads - num_producers) ] for t in threads: t.start() for t in threads: t.join() for i in range(num_producers): assert len(items[i]) == num_items assert set(items[i]) == set(range(num_items))