【发布时间】:2019-11-23 08:38:28
【问题描述】:
我的 Python 版本是 3.6.1。
我写了一些东西来使用 Python asyncio 实现消费者-生产者模型。 但它并没有按预期工作。
全部创建了四个事件,但没有任何打印导出。
async def consumer(queue, id):
while True:
val = await queue.get()
print('{} get a val: {}'.format(id, val))
await asyncio.sleep(1)
async def producer(queue, id):
for i in range(5):
val = random.randint(1, 10)
await queue.put(val)
print('{} put a val: {}'.format(id, val))
await asyncio.sleep(1)
async def main():
queue = asyncio.Queue()
consumer_1 = asyncio.ensure_future(consumer(queue, 'consumer_1'))
consumer_2 = asyncio.ensure_future(consumer(queue, 'consumer_2'))
producer_1 = asyncio.ensure_future(producer(queue, 'producer_1'))
producer_2 = asyncio.ensure_future(producer(queue, 'producer_2'))
await asyncio.sleep(10)
consumer_1.cancel()
consumer_2.cancel()
await asyncio.gather(consumer_1, consumer_2, producer_1, producer_2, return_exceptions=True)
loop = asyncio.get_event_loop()
tasks = [asyncio.ensure_future(main())]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
你能帮我改正吗?
【问题讨论】:
-
我已经成功使用
multiprocessing.Queue而不是asyncio.Queuedocs.python.org/3.7/library/…。 -
@abdusco 抱歉,我忘记了我的 Python 版本是 3.6.1。我将 asyncio.Queue 更改为 multiprocessing.Queue。程序在 consumer_1 中暂停。
标签: python consumer producer python-asyncio