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实现代理服务功能实例
Nov 15 Python
Python验证码识别处理实例
Dec 28 Python
Python实现简单字典树的方法
Apr 29 Python
20招让你的Python飞起来!
Sep 27 Python
python ddt实现数据驱动
Mar 14 Python
Python绘制3D图形
May 03 Python
多个应用共存的Django配置方法
May 30 Python
python实现泊松图像融合
Jul 26 Python
NumPy 数组使用大全
Apr 25 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
对pytorch中的梯度更新方法详解
Aug 20 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
ASP和PHP都是可以删除自身的
2007/04/09 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
php如何获取文件的扩展名
2015/10/28 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
致跳远运动员广播稿
2014/02/11 职场文书
求职信内容怎么写
2014/05/26 职场文书
应急处置方案
2014/06/16 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python