python asyncio queue_python中利用队列asyncio.Queue进行通讯详解

前言

本文主要给大家介绍了关于python用队列asyncio.Queue通讯的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

asyncio.Queue与其它队列是一样的,都是先进先出,它是为协程定义的

例子如下:

import asyncio

async def consumer(n, q):

print('consumer {}: starting'.format(n))

while True:

print('consumer {}: waiting for item'.format(n))

item = await q.get()

print('consumer {}: has item {}'.format(n, item))

if item is None:

# None is the signal to stop.

q.task_done()

break

else:

await asyncio.sleep(0.01 * item)

q.task_done()

print('consumer {}: ending'.format(n))

async def producer(q, num_workers):

print('producer: starting')

# Add some numbers to the queue to simulate jobs

for i in range(num_workers * 3):

await q.put(i)

print('producer: added task {} to the queue'.format(i))

# Add None entries in the queue

# to signal the consumers to exit

print('producer: adding stop signals to the queue')

for i in range(num_workers):

await q.put(None)

print('producer: waiting for queue to empty')

await q.join()

print('producer: ending')

async def main(loop, num_consumers):

# Create the queue with a fixed size so the producer

# will block until the consumers pull some items out.

q = asyncio.Queue(maxsize=num_consumers)

# Scheduled the consumer tasks.

consumers = [

loop.create_task(consumer(i, q))

for i in range(num_consumers)

]

# Schedule the producer task.

prod = loop.create_task(producer(q, num_consumers))

# Wait for all of the coroutines to finish.

await asyncio.wait(consumers + [prod])

event_loop = asyncio.get_event_loop()

try:

event_loop.run_until_complete(main(event_loop, 2))

finally:

event_loop.close()

输出如下:

consumer 0: starting

consumer 0: waiting for item

consumer 1: starting

consumer 1: waiting for item

producer: starting

producer: added task 0 to the queue

producer: added task 1 to the queue

consumer 0: has item 0

consumer 1: has item 1

producer: added task 2 to the queue

producer: added task 3 to the queue

consumer 0: waiting for item

consumer 0: has item 2

producer: added task 4 to the queue

consumer 1: waiting for item

consumer 1: has item 3

producer: added task 5 to the queue

producer: adding stop signals to the queue

consumer 0: waiting for item

consumer 0: has item 4

consumer 1: waiting for item

consumer 1: has item 5

producer: waiting for queue to empty

consumer 0: waiting for item

consumer 0: has item None

consumer 0: ending

consumer 1: waiting for item

consumer 1: has item None

consumer 1: ending

producer: ending

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值