国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Python 協(xié)程的詳細用法使用和例子

2020-02-15 21:53:25
字體:
供稿:網(wǎng)友

從句法上看,協(xié)程與生成器類似,都是定義體中包含 yield 關鍵字的函數(shù)??墒?,在協(xié)程中, yield 通常出現(xiàn)在表達式的右邊(例如, datum = yield),可以產(chǎn)出值,也可以不產(chǎn)出 —— 如果 yield 關鍵字后面沒有表達式,那么生成器產(chǎn)出 None。

協(xié)程可能會從調(diào)用方接收數(shù)據(jù),不過調(diào)用方把數(shù)據(jù)提供給協(xié)程使用的是 .send(datum) 方法,而不是next(…) 函數(shù)。

==yield 關鍵字甚至還可以不接收或傳出數(shù)據(jù)。不管數(shù)據(jù)如何流動, yield 都是一種流程控制工具,使用它可以實現(xiàn)協(xié)作式多任務:協(xié)程可以把控制器讓步給中心調(diào)度程序,從而激活其他的協(xié)程==。

協(xié)程的生成器的基本行為

這里有一個最簡單的協(xié)程代碼:

def simple_coroutine():  print('-> start')  x = yield  print('-> recived', x)sc = simple_coroutine()next(sc)sc.send('zhexiao')

解釋:

1. 協(xié)程使用生成器函數(shù)定義:定義體中有 yield 關鍵字。
2. yield 在表達式中使用;如果協(xié)程只需從客戶那里接收數(shù)據(jù),那么產(chǎn)出的值是 None —— 這個值是隱式指定的,因為 yield 關鍵字右邊沒有表達式。
3. 首先要調(diào)用 next(…) 函數(shù),因為生成器還沒啟動,沒在 yield 語句處暫停,所以一開始無法發(fā)送數(shù)據(jù)。
4. 調(diào)用send方法,把值傳給 yield 的變量,然后協(xié)程恢復,繼續(xù)執(zhí)行下面的代碼,直到運行到下一個 yield 表達式,或者終止。

==注意:send方法只有當協(xié)程處于 GEN_SUSPENDED 狀態(tài)下時才會運作,所以我們使用 next() 方法激活協(xié)程到 yield 表達式處停止,或者我們也可以使用 sc.send(None),效果與 next(sc) 一樣==。

協(xié)程的四個狀態(tài):

協(xié)程可以身處四個狀態(tài)中的一個。當前狀態(tài)可以使用inspect.getgeneratorstate(…) 函數(shù)確定,該函數(shù)會返回下述字符串中的一個:

1. GEN_CREATED:等待開始執(zhí)行
2. GEN_RUNNING:解釋器正在執(zhí)行
3. GEN_SUSPENED:在yield表達式處暫停
4. GEN_CLOSED:執(zhí)行結(jié)束

==最先調(diào)用 next(sc) 函數(shù)這一步通常稱為“預激”(prime)協(xié)程==(即,讓協(xié)程向前執(zhí)行到第一個 yield 表達式,準備好作為活躍的協(xié)程使用)。

import inspectdef simple_coroutine(a):  print('-> start')  b = yield a  print('-> recived', a, b)  c = yield a + b  print('-> recived', a, b, c)# run sc = simple_coroutine(5)next(sc)sc.send(6) # 5, 6sc.send(7) # 5, 6, 7

示例:使用協(xié)程計算移動平均值

def averager():  total = 0.0  count = 0  avg = None  while True:    num = yield avg    total += num    count += 1    avg = total/count# runag = averager()# 預激協(xié)程print(next(ag))   # Noneprint(ag.send(10)) # 10print(ag.send(20)) # 15
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿拉善盟| 吉安市| 盐山县| 思南县| 延川县| 鹤庆县| 姚安县| 瓦房店市| 永福县| 准格尔旗| 昂仁县| 金湖县| 株洲市| 元江| 阿鲁科尔沁旗| 仪征市| 衢州市| 陆丰市| 安丘市| 鸡泽县| 甘孜| 五家渠市| 浦北县| 泾源县| 锡林郭勒盟| 青川县| 柞水县| 通化市| 新郑市| 察隅县| 曲松县| 水富县| 陕西省| 浠水县| 即墨市| 沙河市| 宣恩县| 澄迈县| 裕民县| 逊克县| 邵东县|