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

发布时间 - 2026-01-11 03:11:04    点击率:

前言

本文主要给大家介绍了关于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  # 队列queue  # 队列  # queue  # Python异步编程之asyncio.create_task()用法示例解析  # Python异步编程中asyncio.gather的并发控制详解  # Python使用asyncio.Queue进行任务调度的实现  # Python Asyncio库之asyncio.task常用函数详解  # python 使用事件对象asyncio.Event来同步协程的操作  # Python asyncio.run() 和 asyncio.gath  # 都是  # 相关内容  # 说了  # 不多  # 有一定  # 它是  # 给大家  # 这篇文章  # 谢谢大家  # 是一样的  # 有疑问  # item  # signal  # await  # waiting  # starting  # print  # True  # format  # stop 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何挑选优质建站一级代理提升网站排名?  浅述节点的创建及常见功能的实现  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Android Socket接口实现即时通讯实例代码  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何在阿里云部署织梦网站?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel如何自定义错误页面(404, 500)?(代码示例)  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel如何生成URL和重定向?(路由助手函数)  js实现获取鼠标当前的位置  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何在橙子建站中快速调整背景颜色?  微信小程序 input输入框控件详解及实例(多种示例)  如何撰写建站申请书?关键要点有哪些?  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何快速搭建支持数据库操作的智能建站平台?  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  JavaScript实现Fly Bird小游戏  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  晋江文学城电脑版官网 晋江文学城网页版直接进入  移动端脚本框架Hammer.js  如何挑选高效建站主机与优质域名?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  免费视频制作网站,更新又快又好的免费电影网站?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  如何在万网主机上快速搭建网站?  EditPlus中的正则表达式实战(6)  高防服务器如何保障网站安全无虞?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Laravel如何自定义分页视图?(Pagination示例)  如何在VPS电脑上快速搭建网站?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  bootstrap日历插件datetimepicker使用方法  轻松掌握MySQL函数中的last_insert_id()  如何快速配置高效服务器建站软件?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  利用JavaScript实现拖拽改变元素大小  Laravel怎么实现验证码(Captcha)功能  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复