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)

相关推荐

  • 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 i

  • 利用Python中xlwt模块操作excel的示例详解

    目录 一.安装 二.创建表格并写入 三.设置单元格样式 四.设置单元格宽度 五.设置单元格背景色 六.设置单元格内容对齐方式 七.单元格添加超链接 八.单元格添加公式 九.单元格中输入日期 十.合并行和列 十一.单元格添加边框 一.安装 pip install xlwt 二.创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 添加sheet worksheet = workb

  • 对numpy的array和python中自带的list之间相互转化详解

    a=([3.234,34,3.777,6.33]) a为python的list类型 将a转化为numpy的array: np.array(a) array([ 3.234, 34. , 3.777, 6.33 ]) 将a转化为python的list a.tolist() 以上这篇对numpy的array和python中自带的list之间相互转化详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: Python创建二维数组实例(关于list的一个

  • 对python中Json与object转化的方法详解

    python提供了json包来进行json处理,json与python中数据类型对应关系如下: 一个python object无法直接与json转化,只能先将对象转化成dictionary,再转化成json:对json,也只能先转换成dictionary,再转化成object,通过实践,源码如下: import json class user: def __init__(self, name, pwd): self.name = name self.pwd = pwd def __str__(s

  • Python中Pyspider爬虫框架的基本使用详解

    1.pyspider介绍 一个国人编写的强大的网络爬虫系统并带有强大的WebUI.采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器. 用Python编写脚本 功能强大的WebUI,包含脚本编辑器,任务监视器,项目管理器和结果查看器 MySQL,MongoDB,Redis,SQLite,Elasticsearch; PostgreSQL与SQLAlchemy作为数据库后端 RabbitMQ,Beanstalk,Redis

  • Python中八大图像特效算法的示例详解

    目录 0写在前面 1毛玻璃特效 2浮雕特效 3油画特效 4马赛克特效 5素描特效 6怀旧特效 7流年特效 8卡通特效 0 写在前面 图像特效处理是基于图像像素数据特征,将原图像进行一定步骤的计算——例如像素作差.灰度变换.颜色通道融合等,从而达到期望的效果.图像特效处理是日常生活中应用非常广泛的一种计算机视觉应用,出现在各种美图软件中,这些精美滤镜背后的数学原理都是相通的,本文主要介绍八大基本图像特效算法,在这些算法基础上可以进行二次开发,生成更高级的滤镜. 本文采用面向对象设计,定义了一个图像

  • python中函数的返回值及类型详解

    目录 1.返回值介绍 2.带有返回值的函数 3.保存函数的返回值 4.四种函数的类型 1.无参数,无返回值的函数 2.无参数,有返回值的函数 3.有参数,无返回值的函数 4.有参数,有返回值的函数 5.小结 5.在python中我们可不可以返回多个值? 1.返回值介绍 现实生活中的场景: 我给儿子10块钱,让他给我买包烟.这个例子中,10块钱是我给儿子的,就相当于调用函数时传递到参数,让儿子买烟这个事情最终的目标是,让他把烟给你带回来然后给你对么,,,此时烟就是返回值 开发中的场景: 定义了一个

  • Python中如何创建和运行异步任务详解

    目录 正文 1. 什么是异步任务 2. 如何创建任务 2.1. 高级 API 2.2. 低级 API 3. 任务何时运行? 正文 您可以从 asyncio 程序中的协程创建任务对象.任务提供独立调度和运行的协程的句柄,并允许查询.取消任务,以及稍后检索结果和异常.异步事件循环管理任务.因此,所有协程都成为事件循环中的任务并作为任务进行管理. 让我们仔细看看 asyncio 任务. 1. 什么是异步任务 异步任务是一个调度并独立运行 asyncio 协程的对象.它提供了一个调度协程的句柄,asyn

  • Python 中 Virtualenv 和 pip 的简单用法详解

    本文介绍了Python 中 Virtualenv 和 pip 的简单用法详解,分享给大家,具体如下: 0X00 安装环境 我们在 Python 开发和学习过程中需要用到各种库,然后在各个不同的项目和作品里可能用的版本还不一样,正因为有这种问题的存在才催生了virtualenv的诞生.virtualenv 可以在电脑上创建一个虚拟环境,可以针对每一个项目创建一个虚拟环境,这样就不用担心各个不同的项目用不同版本的库的时候出现的冲突了. 下面的内容只适用于 Linux/OSX,未经 Windows 环

  • python中函数总结之装饰器闭包详解

    1.前言 函数也是一个对象,从而可以增加属性,使用句点来表示属性. 如果内部函数的定义包含了在外部函数中定义的对象的引用(外部对象可以是在外部函数之外),那么内部函数被称之为闭包. 2.装饰器 装饰器就是包装原来的函数,从而在不需要修改原来代码的基础之上,可以做更多的事情. 装饰器语法如下: @deco2 @deco1 def func(arg1,arg2...): pass 这个表示了有两个装饰器的函数,那么表示的含义为:func = deco2(deco1(func)) 无参装饰器语法如下:

随机推荐