這段時間太忙了,沒時間更新部落格。
今天把python撿起來,看了下 協程。記錄乙個一開始沒太明白的點。
直接貼**:
def consumer():
r = ''
j = 0
while true:
n = yield r # 3
j = j + 1
print('********j=%d' %j)
if not n:
return
print('[consumer] consuming %s...' % n)
r = '200 ok'
def produce(c):
c.send(none) # 1
print('------------')
n = 0
while n < 5:
n = n + 1
print('[producer] producing %s...' % n)
r = c.send(n) # 2
print('[producer] consumer return: %s' % r)
c.close()
if __name__ == "__main__":
c = consumer()
produce(c)
一開始沒弄明白 #1 標記出的
c.send(none)
有什麼意義。但拿掉這一句後程式會報出如下錯誤:
f:\python_projects\python_test>python new.py
------------
[producer] producing 1...
traceback (most recent call last):
file "new.py", line 26, in produce(c)
file "new.py", line 20, in produce
r = c.send(n) # 2
typeerror: can't send non-none value to a just-started generator
搜尋一下才明白:
是因為協程還未啟用(gen_created 狀態)要呼叫next(c) 啟用協程,也可以呼叫c.send(none)來啟用
關於協程 nodejs和golang協程的不同
nodejs和golang都是支援協程的,從表現上來看,nodejs對於協程的支援在於async await,golang對協程的支援在於goroutine。關於協程的話題,簡單來說,可以看作是非搶占式的輕量級執行緒。一句話概括,上面提到了 可以看作是非搶占式的輕量級執行緒 在多執行緒中,把一段 放...
協程巢狀協程
import asyncio import functools 第三層協程 async def test1 print 我是test1 await asyncio.sleep 1 print test1已經睡了1秒 await asyncio.sleep 3 print test1又睡了3秒 ret...
關於協程的問題總結
協程其實就是可以由程式自主控制的執行緒 在python裡主要由yield 和yield from 控制,可以通過生成者消費者例子來理解協程 利用yield from 向生成器 協程 傳送資料 傳統的生產者 消費者是乙個執行緒寫訊息,乙個執行緒取訊息,通過鎖機制控制佇列和等待,但一不小心就可能死鎖。如...