色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

Python 中由 yield 實現異步操作

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

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

①返回一個值、②接收調用者的參數

分析下面的代碼:

#!/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() #創建一個生成器produce(c) #在該函數中,調用生成器的send()方法

Python 中由 yield 實現異步操作

結合程序運行過程,可分析出:

第一步:

在produce(c)函數中,調用了c.send(None)啟動了生成器,遇到yield暫停;接著執行produce()中接下來的代碼,從運行結果看,確實打印出了[Produce] producing 1 … 當程序運行至c.send(h)時,調用生成器并且通過yield傳遞了參數(h = 1)進入consumer()函數執行。

第二步:

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

第三步:

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

補充知識:python asyncio模型 事件循環

異步建立在事件循環上.

簡單來說事件循環:

1.把要執行的函數放入隊列

2.取出函數,執行

3.看看還要不要繼續放入此函數

4.繼續第一步

一個簡單的例子說明:

''' 1.yield 掛起當前函數. 2.使用調度器循環 3.使用next喚醒此函數繼續執行'''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#模擬一個調度器task_q = collections.deque((f1(),f2(),f3()))#讓調度器調度這些生成器們while task_q: task = task_q.popleft() #彈出首個生成器 try: next(task) #執行,如果沒有異常證明此生成器還沒執行完成,可以繼續放入隊列中 task_q.append(task) #執行完成后,把任務繼續添加到隊列中. time.sleep(0.5) except StopIteration as ex: pass

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 有码日韩| 国产成人精品日本亚洲专一区 | 成人黄页 | 你懂的国产精品 | 毛片日韩 | 国产精品成人在线播放 | 成人三级在线播放 | 黄色三级免费 | 久久精品一区二区三区不卡牛牛 | 久久综合综合久久 | 中文字幕一二三区 | 国产亚洲精品久久综合影院 | 国产女王女m视频vk 国产女王丨vk | 欧美韩国日本一区 | 看三级毛片 | 色悠久久久久综合网伊人男男 | 国产三片高清在线观看 | 日韩男人天堂 | 交性视频免费看 | 一级a爰片久久毛片 | freese×video性欧美丝袜 | 欧美亚洲一级片 | 亚洲欧美精品一区天堂久久 | 一级中国乱子伦视频 | 可以看的毛片网站 | 国产成人盗拍精品免费视频 | 亚洲视频手机在线观看 | 国产国语一级毛片全部 | 亚洲免费一区 | 中文一级国产特级毛片视频 | 99精品久久久久久久 | 男女视频免费看 | 亚洲一区二区三区免费看 | 很黄很色的免费视频 | 一区二区三区在线免费观看视频 | 99视频福利 | 国产精品99久久免费观看 | 日韩精品一区二区三区在线观看l | 亚色网址 | 精品亚洲成a人在线播放 | 国产精品人成人免费国产 |