纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

python中send函数close函数与yield关键字实

6月10日 顾昀汐投稿
  前言
  我们之前接触过多线程和多进程,他们可以完成两个甚至多个线程或进程通知执行不同得函数,并且可以通过函数来控制让其中一个线程等待另一个线程执行一部分代码以后再去执行,比如有两个A和B,线程1执行一部分A,然后停止执行,等待线程2执行一部分B,然后线程2停止执行,再等待线程1执行A,执行完以后线程2再执行函数B
  体现如下:defA():print(1)print(2)print(3)defB():print(x)print(y)print(z)
  结果12xy3z
  这种操作其实可以用协程来实现,什么是协程?协程就是只有一个线程来实现上面的效果。协程相比与多线程有什么好处呢?
  最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
  第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
  协程是通过generator来实现的,其中涉及的就是yield关键字和send()函数的使用。
  在讲解具体的使用之前,我们先了解一下send()函数和yield关键字。generator的send()函数和yield关键字
  以之前对yield关键字的了解,无非就是yield关键字可以给调用者返回消息,同时当函数通过yield关键字返回消息以后函数会暂停在当前位置。
  如下:deftest():number1whileTrue:number2yieldnumberprint(我是yield关键字下面一行代码)ttest()next(t)2next(t)我是yield关键字下面一行代码4next(t)我是yield关键字下面一行代码8
  但其实yield关键字的作用是函数与调用者的通信,它不光能够将值返回给调用者,它还可以接收调用者传过来的值,那么怎么实现呢?调用者通过send()函数将值传递给generator,generator通过yield前面的变量来接收,如下:deftest():number0whileTrue:nyieldnumberprint(我是yield关键字下面一行代码)print(调用者传递过来的值为:,n)ttest()t。send(None)0t。send(1)我是yield关键字下面一行代码调用者传递过来的值为:10t。send(2)我是yield关键字下面一行代码调用者传递过来的值为:20next(t)我是yield关键字下面一行代码调用者传递过来的值为:None0
  可以发现,send函数和next函数的区别就是send函数可以在执行generator的过程中,给generator发送消息。而next仅仅是接收yield右边的变量值。
  好了,我们现在知道了send函数与yield关键字配合使用可以实现调用者与generator的通信了,那么我们就可以通过他们来实现单一线程切换执行不同函数了。这种操作就叫做协程。generator的close函数
  由于下面还涉及到一个close函数,这里也演示一下,方便下面理解deftest():number1whileTrue:number2yieldnumberprint(我是yield关键字下面一行代码)ttest()next(t)2next(t)我是yield关键字下面一行代码4next(t)我是yield关键字下面一行代码8t。close()next(t)关闭generator后再调用,会出现StopIteration异常,即后面没值了Traceback(mostrecentcalllast):Filepyshell105,line1,inmodulenext(t)StopIteration协程
  下面是一个生产者与消费者的例子,代码如下:encodingutf8defconsumer():rwhileTrue:nyieldryield后面的r是返回给调用者的值,yield前面的n用来接收调用者通过send函数传过来的值ifnotn:如果n是None,就结束该函数,因为None代表还没有生产出来产品print(consumer即将结束)实际上该代码中这行永远不会被执行returnprint(〔CONSUMER〕Consumings。。。n)r200OKdefproduce(c):send函数让线程停止执行当前函数,从而去执行generatorprint(send返回值为:,c。send(None))send语句实际上是给yield左边的变量n赋值,send返回的值就是yield后面的r,返回的是空字符n0whilen5:nn1print(〔PRODUCER〕Producings。。。n)rc。send(n)生产出来产品以后告诉消费者,我这里有货了print(〔PRODUCER〕Consumerreturn:sr)消费者传递过来消息,它已经收到了c。close()cconsumer()produce(c)
  运行结果如下:
  第一行send返回值是一个空字符
  send返回值为:〔PRODUCER〕Producing1。。。〔CONSUMER〕Consuming1。。。〔PRODUCER〕Consumerreturn:200OK〔PRODUCER〕Producing2。。。〔CONSUMER〕Consuming2。。。〔PRODUCER〕Consumerreturn:200OK〔PRODUCER〕Producing3。。。〔CONSUMER〕Consuming3。。。〔PRODUCER〕Consumerreturn:200OK〔PRODUCER〕Producing4。。。〔CONSUMER〕Consuming4。。。〔PRODUCER〕Consumerreturn:200OK〔PRODUCER〕Producing5。。。〔CONSUMER〕Consuming5。。。〔PRODUCER〕Consumerreturn:200OK
投诉 评论 转载

华为突然谈6G商用时间!任正非是秀肌肉?还是另有意图?9月10日,华为轮值董事长徐直军,老徐签发公司总裁办电子邮件,老徐在这份文件中坚定地认为,6G将在2030年左右投向市场。正当全球都在积极推进5G基础设施的时候,华为此次……python中send函数close函数与yield关键字实前言我们之前接触过多线程和多进程,他们可以完成两个甚至多个线程或进程通知执行不同得函数,并且可以通过函数来控制让其中一个线程等待另一个线程执行一部分代码以后再去执行,比如……Epic加入过滤器功能,可以给游戏分类了IT之家5月8日消息,Epic商城缺失一些非常基础的功能,比如给游戏分类,用户只能按照字母顺序或最近的游玩时间分类。好在在最近的更新中,Epic商城终于解决了这个问题。E……中式悬疑剧情解谜新作纸嫁衣4公布今年暑期上线,现已开启苹果iIT之家5月20日消息,中式悬疑剧情解谜新作《纸嫁衣4》现已正式公布,本作将于2022暑期上线,目前已在安卓iOS平台开启预约,心动游戏代理发行。此外,另一款黑暗悬疑剧情解谜游……漫威多元宇宙大乱斗炉石前总监推出卡牌游戏MarvelSnapIT之家5月20日消息,MarvelEntertainment现推出了一款新游戏,这是由前《炉石传说》游戏总监BenBrode开发的一款新作。BenBrode于2018年……为SteamDeck发售铺路Steam迎动态云同步新功能,掌IT之家1月25日消息,Valve推出的SteamDeck游戏掌机原定于2021年末发售,但是由于原材料短缺问题,官方将日期延后到了2022年。就在玩家们担心产品再次延期时,V……6G能否超越5G?随着国民经济的快速发展,我国的通讯技术也日趋完善。现在我们日常生活中所使用的通讯技术网络为5G,当然还有个别群众还在使用4G网络。近日,中国互联网络信息中心(CNNIC)……饥荒联机版上线Switch,发售宣传片公布IT之家4月13日消息,今天,《饥荒:联机版》已在Switch平台上线。玩家可在沙发上或者旅途中享受战斗、耕种、建造和探索的乐趣。科雷发布了一段上市宣传片。科雷表示,在4……决策参考张一鸣成中国互联网首富李佳琦薇娅一晚卖了189亿1、腾讯、华为等20多家企业承诺不监听个人隐私事件:10月22日,由中共深圳市委网信办联合深圳市公安局、市市场监管局、市通管局主办的深圳市App个人信息共护大会在深圳中心……微信iOS8。0正式版更新余额宝第一名存了2。2亿网易云去除微信iOS8。0。13正式版更新iOS平台的微信现已推出新版本。本次更新是正式版更新,版本号从8。0。12更新至8。0。13。此次版本更新似乎依然侧重于视频号和直播……索尼与乐高母公司为Epic融资20亿美元,用于推动建立元宇宙IT之家4月11日消息,据TheVerge报道,今天,游戏开发商Epic宣布了一轮20亿美元的融资,据称将用于推进公司建立元宇宙并支持其持续增长。据报道,这些资金来自索尼……秋日家居巧打造,让你家告别秋燥秋天已经悄悄的来到了我们身边,秋燥的现象也会随之出现,它不仅仅表现在人体上的一些不舒适现象,甚至在家居方面也会显现出来,比如室内空气干燥、家具的开裂变形等,那么如何才能让你的家……
凯尔莫甘娜即将上线,英雄联盟手游天使姐妹CG公布科学最终会消灭迷信吗?没错,比尔盖茨和贝佐斯组团投矿鬼泣制作人神谷英树吐槽任天堂Switch3个NS手柄全部漂移佳能G3800EA战地6将带来史诗级体验,规模和保真度前所未有赛博朋克2077将于6月21日重返PS商店暂不推荐在PS4上美团很委屈,给外卖小哥买社保或致亏损!网友外卖又要涨价了?最后一天大优惠,赛博朋克2077Steam版限时238元iOS12。1即将发布!一代神机6s终究要退休了地下城与勇士手游开场CG公布,8月12日上线一步错步步错!印度沦为西方韭菜的5个原因,美国究竟干了啥

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形