我有这个脚本
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还是无害且不会产生错误?
答案 0 :(得分:2)
如果队列中没有要消耗的任务,这会产生错误吗?
由于使用者调用get()
来消耗下一个排队的项目,因此,如果队列为空,它将仅等待下一个项目的到达。在等待过程中不会浪费CPU,也不会报告任何错误-消费者协程将仅挂起,直到生产出某个物品为止,此后立即将其唤醒。在等待期间,事件循环可以自由运行其他协程(如果有的话)。