电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python Asyncio模塊實現的生產消費者模型的方法

瀏覽:108日期:2022-06-26 17:22:39

asyncio的關鍵字說明

event_loop事件循環:程序開啟一個無限循環,把一些函數注冊到事件循環上,當滿足事件發生的時候,調用相應的協程函數 coroutine協程:協程對象,指一個使用async關鍵字定義的函數,它的調用不會立即執行函數,而是會返回一個協程對象,協程對象需要注冊到事件循環,由事件循環調用。 task任務:一個協程對象就是一個原生可以掛起的函數,任務則是對協程進一步封裝,其中包含了任務的各種狀態 future:代表將來執行或沒有執行的任務結果。它和task上沒有本質上的區別 async/await關鍵字:async定義一個協程,await用于掛起阻塞的異步調用接口,在python3.4是使用asyncio.coroutine/yield from

在設計模式中,生產消費者模型占有非常重要的地位,這個模型在現實世界中也有很多有意思的對應場景,比如做包子的人和吃包子的人,當兩者速度不匹配時,就需要有一個模型來做匹配(偶合),實現做的包子都會依次消費掉。

import asyncioclass ConsumerProducerModel: def __init__(self, producer, consumer, queue=asyncio.Queue(), plate_size=6): # the plate holds 6pcs bread self.queue = queue self.producer = producer self.consumer = consumer self.plate_size = plate_size async def produce_bread(self): for i in range(self.plate_size): bread = f'bread {i}' await asyncio.sleep(0.5) # bread makes faster, 0.5s/pc await self.queue.put(bread) print(f’{self.producer} makes {bread}’) async def consume_bread(self): while True: bread = await self.queue.get() await asyncio.sleep(1) # eat slower, 1s/pc print(f’{self.consumer} eats {bread}’) self.queue.task_done()async def main(): queue = asyncio.Queue() cp1 = ConsumerProducerModel('John', 'Grace', queue) # group 1 cp2 = ConsumerProducerModel('Mike', 'Lucy', queue) # group 2 producer_1 = cp1.produce_bread() producer_2 = cp2.produce_bread() consumer_1 = asyncio.ensure_future(cp1.consume_bread()) consumer_2 = asyncio.ensure_future(cp2.consume_bread()) await asyncio.gather(*[producer_1, producer_2]) await queue.join() consumer_1.cancel() consumer_2.cancel()if __name__ == ’__main__’: loop = asyncio.get_event_loop() loop.run_until_complete(main()) loop.close()

生產消費者模型可以使用多線程和隊列來實現,這里選擇協程不僅是因為性能不錯,而且整個下來邏輯清晰:

1. 先定義初始化的東西,要有個隊列,要有生產者,要有消費者,要有裝面包的盤子大小;

2. 生產者:根據盤子大小生產出對應的東西(面包),將東西放入盤子(queue);

3. 消費者:從盤子上取東西,每次取東西都是一個任務,每次任務完成,就標記為task_done(調用函數)。在這個層面,一直循環;

4. 主邏輯:實例化生產消費者模型對象,創建生產者協程,創建任務(ensure_future),收集協程結果,等待所有線程結束(join),手動取消兩個消費者協程;

5. 運行:首先創建事件循環,然后進入主邏輯,直到完成,關閉循環。

到此這篇關于Python Asyncio模塊實現的生產消費者模型的方法的文章就介紹到這了,更多相關Python生產消費者模型內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 设定时间记录电子秤-自动累计储存电子秤-昆山巨天仪器设备有限公司 | 船用泵,船用离心泵,船用喷射泵,泰州隆华船舶设备有限公司 | 上海璟文空运首页_一级航空货运代理公司_机场快递当日达 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 | 宜兴紫砂壶知识分享 - 宜兴壶人| 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 伺服电机_直流伺服_交流伺服_DD马达_拓达官方网站 | LINK FASHION 童装·青少年装展| 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 洗石机-移动滚筒式,振动,螺旋,洗矿机-青州冠诚重工机械有限公司 | 不锈钢钢格栅板_热浸锌钢格板_镀锌钢格栅板_钢格栅盖板-格美瑞 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 主题班会网 - 安全教育主题班会,各类主题班会PPT模板 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 | 湖南专升本-湖南省专升本报名-湖南统招专升本考试网 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | PE一体化污水处理设备_地埋式生活污水净化槽定制厂家-岩康塑业 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 德国BOSCH电磁阀-德国HERION电磁阀-JOUCOMATIC电磁阀|乾拓百科 | 光纤测温-荧光光纤测温系统-福州华光天锐光电科技有限公司 | 绿叶|绿叶投资|健康产业_绿叶投资集团有限公司 | 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 洁净实验室工程-成都手术室净化-无尘车间装修-四川华锐净化公司-洁净室专业厂家 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 广州各区危化证办理_危险化学品经营许可证代办 | 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | 基本型顶空进样器-全自动热脱附解吸仪价格-AutoHS全模式-成都科林分析技术有限公司 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 小型手持气象站-空气负氧离子监测站-多要素微气象传感器-山东天合环境科技有限公司 | 江苏南京多语种翻译-专业翻译公司报价-正规商务翻译机构-南京华彦翻译服务有限公司 | 高压管道冲洗清洗机_液压剪叉式升降机平台厂家-林君机电 |