Пример #1
0
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))
Пример #2
0
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()
Пример #3
0
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()
Пример #4
0
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))
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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)
Пример #8
0
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))
Пример #9
0
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)