亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

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

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

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

yield在python中初學時,覺得比較難理解。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é)合程序運行過程,可分析出:

第一步:

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

第三步:

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

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

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

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

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

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

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

4.繼續(xù)第一步

一個簡單的例子說明:

''' 1.yield 掛起當前函數(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í)行完成后,把任務繼續(xù)添加到隊列中. time.sleep(0.5) except StopIteration as ex: pass

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

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产免费亚洲 | 男女朋友做爽爽爽免费视频网 | av人摸人人人澡人人超碰 | 本道久久综合88全国最大色 | 欧美在线一级视频 | 一级毛片私人影院老司机 | 亚洲一区二区免费视频 | 青青影院一区二区免费视频 | 自拍偷自拍亚洲精品一区 | 国产成人在线免费视频 | 欧美色成人tv在线播放 | 亚洲国产欧美日韩精品一区二区三区 | 伊人久久大香线焦在观看 | 天堂一区二区三区在线观看 | 成人免费观看国产高清 | 国产精品系列在线一区 | 曰韩一级毛片 | 一级毛片视频播放 | 国产欧美日韩在线 | 国产成人ay手机在线观看 | 日本理论片午夜论片 | 国产小视频在线高清播放 | 97超级碰碰碰免费公开在线观看 | 国产成人一区二区在线不卡 | 国产玖玖在线 | 久草视频2 | 自拍偷拍视频在线观看 | 中文字幕精品一区二区2021年 | 国产精品亚洲欧美云霸高清 | 中文偷拍视频在线观看 | 91精品国产高清久久久久久91 | 国产精品亚洲专一区二区三区 | 99ri在线观看 | 欧美亚洲日本国产综合网 | 亚洲一区二区三区欧美 | 国产日韩视频在线观看 | 亚洲欧美日韩综合二区三区 | 精品国产91在线网 | 日本高清毛片视频在线看 | 日韩欧美一级毛片在线 | 寡妇一级毛片 |