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 30 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
Jul 15 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
安装docker-compose的两种最简方法
Jul 30 Python
python 进程的几种创建方式详解
Aug 29 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
Django实现图片上传功能步骤解析
Apr 22 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
Jan 08 Python
如何在C++中调用Python
May 21 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 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
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
python处理csv数据的方法
2015/03/11 Python
Python random模块用法解析及简单示例
2017/12/18 Python
python设置环境变量的作用和实例
2019/07/09 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
django 读取图片到页面实例
2020/03/27 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
康拓普公司Java笔面试
2016/09/23 面试题
事业单位个人应聘自荐信
2013/09/21 职场文书
中职生自我鉴定范文
2013/10/03 职场文书
材料化学应届生求职信
2013/10/09 职场文书
小学新学期教师寄语
2014/01/18 职场文书
校外活动方案
2014/08/28 职场文书
对照检查剖析材料
2014/09/30 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
MySQL创建定时任务
2022/01/22 MySQL