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


Posted in Python onSeptember 10, 2017

前言

本文主要给大家介绍了关于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

总结

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

Python 相关文章推荐
Python编写屏幕截图程序方法
Feb 18 Python
python复制与引用用法分析
Apr 08 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
Python中的条件判断语句与循环语句用法小结
Mar 21 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
python中强大的format函数实例详解
Dec 05 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 Python
Python上下文管理器和with块详解
Sep 09 #Python
Python使用asyncio包处理并发详解
Sep 09 #Python
Python协程的用法和例子详解
Sep 09 #Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 #Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 #Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 #Python
python中实现指定时间调用函数示例代码
Sep 08 #Python
You might like
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
python实现ID3决策树算法
2018/08/29 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
解决python运行启动报错问题
2020/06/01 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
详解rem 适配布局
2018/10/31 HTML / CSS
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
二手书店创业计划书
2014/01/16 职场文书
空气环保标语
2014/06/12 职场文书
介绍信如何写
2015/01/31 职场文书
黄石寨导游词
2015/02/05 职场文书
公务员年终个人总结
2015/02/12 职场文书
入团介绍人意见范文
2015/06/04 职场文书