【发布时间】:2019-10-16 01:25:58
【问题描述】:
为什么 await queue.get() 会阻塞?
import asyncio
async def producer(queue, item):
await queue.put(item)
async def consumer(queue):
val = await queue.get()
print("val = %d" % val)
async def main():
queue = asyncio.Queue()
await consumer(queue)
await producer(queue, 1)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
如果我在 consumer() 之前调用 producer(),它可以正常工作 也就是说,以下工作正常。
async def main():
queue = asyncio.Queue()
await producer(queue, 1)
await consumer(queue)
为什么 await queue.get() 不将控制权交还给事件循环,以便生产者协程可以运行,该协程将填充队列,以便 queue.get() 可以返回。
【问题讨论】:
标签: python-3.x queue python-asyncio producer-consumer