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如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  PythonWeb开发入门教程_Flask快速构建Web应用  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  javascript基于原型链的继承及call和apply函数用法分析  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何快速生成橙子建站落地页链接?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  简历在线制作网站免费版,如何创建个人简历?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  零基础网站服务器架设实战:轻量应用与域名解析配置指南  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何用已有域名快速搭建网站?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  jquery插件bootstrapValidator表单验证详解  网易LOFTER官网链接 老福特网页版登录地址  做企业网站制作流程,企业网站制作基本流程有哪些?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  如何在IIS7上新建站点并设置安全权限?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  如何在景安云服务器上绑定域名并配置虚拟主机?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何快速上传建站程序避免常见错误?  java ZXing生成二维码及条码实例分享  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Bootstrap整体框架之CSS12栅格系统  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  长沙做网站要多少钱,长沙国安网络怎么样?  BootStrap整体框架之基础布局组件  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何为不同团队 ID 动态生成多个独立按钮  Python函数文档自动校验_规范解析【教程】  javascript日期怎么处理_如何格式化输出  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  Laravel如何实现一对一模型关联?(Eloquent示例)  英语简历制作免费网站推荐,如何将简历翻译成英文?  Bootstrap CSS布局之列表  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转