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

您的位置:首頁技術(shù)文章
文章詳情頁

Python 中由 yield 實現(xiàn)異步操作

瀏覽:9日期:2022-07-26 14:18:03

yield在python中初學(xué)時,覺得比較難理解。yield的作用:

①返回一個值、②接收調(diào)用者的參數(shù)

分析下面的代碼:

#!/usr/bin/env python3# -*- coding:utf-8 -*-def consumer(): r = ’’ while True: n = yield r print('[Consumer] n = %d' %n) if not n: return print('[Consumer] consuming %s...' %n) r = ’200 OK’def produce(c): c.send(None) h = 0 while h < 5: h = h + 1 print('[Producer] producing %d...' %h) s = c.send(h) print('[Producer] consumer return: %s' %s) c.close()c = consumer() #創(chuàng)建一個生成器produce(c) #在該函數(shù)中,調(diào)用生成器的send()方法

Python 中由 yield 實現(xiàn)異步操作

結(jié)合程序運(yùn)行過程,可分析出:

第一步:

在produce(c)函數(shù)中,調(diào)用了c.send(None)啟動了生成器,遇到y(tǒng)ield暫停;接著執(zhí)行produce()中接下來的代碼,從運(yùn)行結(jié)果看,確實打印出了[Produce] producing 1 … 當(dāng)程序運(yùn)行至c.send(h)時,調(diào)用生成器并且通過yield傳遞了參數(shù)(h = 1)進(jìn)入consumer()函數(shù)執(zhí)行。

第二步:

yield傳遞參數(shù)(h=1)給consumer()函數(shù)中的n,并接著上一次暫停處往下繼續(xù)執(zhí)行,打印出[Consumer] n = 1,[Consumer] consuming 1… ;在consumer()函數(shù)中此時 r 被賦值為’200 OK’,接著循環(huán)遇到y(tǒng)ield, consumer()函數(shù)又暫停并且返回變量 r 的值,此時程序又進(jìn)入produce(c)函數(shù)中接著執(zhí)行。

第三步:

produce(c)函數(shù)接著第一步中c.send(h)處,繼續(xù)往下執(zhí)行打印出[Producer] consumer return: 200 OK,并進(jìn)行循環(huán),打印[Producer] producing 2… 后,又調(diào)用c.send(h) 。。。如此循環(huán)回到第一步!

補(bǔ)充知識:python asyncio模型 事件循環(huán)

異步建立在事件循環(huán)上.

簡單來說事件循環(huán):

1.把要執(zhí)行的函數(shù)放入隊列

2.取出函數(shù),執(zhí)行

3.看看還要不要繼續(xù)放入此函數(shù)

4.繼續(xù)第一步

一個簡單的例子說明:

''' 1.yield 掛起當(dāng)前函數(shù). 2.使用調(diào)度器循環(huán) 3.使用next喚醒此函數(shù)繼續(xù)執(zhí)行'''def f1(): for i in range(3): print(’f1 %d’%i) yielddef f2(): for i in range(5): print(’f2 %d’ %i) yielddef f3(): for i in range(10): print(’f3 %d’%i) yield#模擬一個調(diào)度器task_q = collections.deque((f1(),f2(),f3()))#讓調(diào)度器調(diào)度這些生成器們while task_q: task = task_q.popleft() #彈出首個生成器 try: next(task) #執(zhí)行,如果沒有異常證明此生成器還沒執(zhí)行完成,可以繼續(xù)放入隊列中 task_q.append(task) #執(zhí)行完成后,把任務(wù)繼續(xù)添加到隊列中. time.sleep(0.5) except StopIteration as ex: pass

以上這篇Python 中由 yield 實現(xiàn)異步操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 杜甫仪器官网|实验室平行反应器|升降水浴锅|台式低温循环泵 | 手持气象站_便携式气象站_农业气象站_负氧离子监测站-山东万象环境 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 透平油真空滤油机-变压器油板框滤油机-滤油车-华之源过滤设备 | 气密性检测仪_气密性检测设备_防水测试仪_密封测试仪-岳信仪器 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | X光检测仪_食品金属异物检测机_X射线检测设备_微现检测 | 高中学习网-高考生信息学习必备平台 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | DAIKIN电磁阀-意大利ATOS电磁阀-上海乾拓贸易有限公司 | 大鼠骨髓内皮祖细胞-小鼠神经元-无锡欣润生物科技有限公司 | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 健身器材-健身器材厂家专卖-上海七诚健身器材有限公司 | 户外-组合-幼儿园-不锈钢-儿童-滑滑梯-床-玩具-淘气堡-厂家-价格 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 | 出国劳务公司_正规派遣公司[严海] | 上海瑶恒实业有限公司|消防泵泵|离心泵|官网| 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 上海道勤塑化有限公司 | 细石混凝土泵_厂家_价格-烟台九达机械有限公司 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 焊接烟尘净化器__焊烟除尘设备_打磨工作台_喷漆废气治理设备 -催化燃烧设备 _天津路博蓝天环保科技有限公司 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 厂房出售_厂房仓库出租_写字楼招租_土地出售-中苣招商网-中苣招商网 | 岛津二手液相色谱仪,岛津10A液相,安捷伦二手液相,安捷伦1100液相-杭州森尼欧科学仪器有限公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | Honsberg流量计-Greisinger真空表-气压计-上海欧臻机电设备有限公司 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 长信科技产业园官网_西安厂房_陕西标准工业厂房 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 电力测功机,电涡流测功机,磁粉制动器,南通远辰曳引机测试台 |