当使用asyncio.Queue()的使用者在队列中没有任务时会发生什么

时间:2019-04-23 10:13:14

标签: python-3.x python-asyncio

我有这个脚本

import asyncio
import random

q = asyncio.Queue()


async def producer(num):
    while True:
        await q.put(num + random.random())
        await asyncio.sleep(random.random())

async def consumer(num):
    while True:
        value = await q.get()
        print('Consumed', num, value)

loop = asyncio.get_event_loop()

for i in range(6):
    loop.create_task(producer(i))

for i in range(3):
    loop.create_task(consumer(i))

loop.run_forever()
使用asyncio.Queue()

我一直在运行脚本,并随机产生任务并将其添加到队列中。如果队列中没有任务要消耗,这将是不使用cpu还是无害且不会产生错误?

1 个答案:

答案 0 :(得分:2)

  

如果队列中没有要消耗的任务,这会产生错误吗?

由于使用者调用get()来消耗下一个排队的项目,因此,如果队列为空,它将仅等待下一个项目的到达。在等待过程中不会浪费CPU,也不会报告任何错误-消费者协程将仅挂起,直到生产出某个物品为止,此后立即将其唤醒。在等待期间,事件循环可以自由运行其他协程(如果有的话)。