在此之前,協程對我來說是乙個比較陌生的概念,學習之後,發現其應用場景還是有不少,大師之言:
協程能自然地表述很多演算法,例如**、遊戲、非同步i/o,以及其他事件驅動型邊吃形式活協作式多工。舉例來說,asyncio、tornado、twisted、simpy庫都是基於協程特性在單個執行緒中管理多個併發活動。
協程使用生成器函式定義:定義體中有yield關鍵字;def
******_coroutine()
("start"
) x =
yield
("coroutine received:" x)
my_coro = ******_coroutine(
)next
(my_coro)
ouput: start
my_coro.send(99)
output:coroutine received:
99traceback(most recent call last):.
..stopiteration
x = yield 寫法表明協程只需從呼叫者那裡接受資料,yield關鍵字右邊沒有表示式時,協程沒有產出,隱式指定為none;
協程有四個狀態:等待開始執行(gen_created),正在執行(gen_running),在yield處暫停(gen_suspended),執行結束(gen_closed),使用inspect.getgeneratorstate()可以查詢當前狀態;
首先需要呼叫next啟用協程生成器my_coro,呼叫my_coro.send(none)作用等同於next呼叫,呼叫next後,協程函式會執行到第乙個yield表示式處暫停,即處於等等開始執行狀態;
Python3學習筆記 清晰理解協程
在了解協程之前,我們先簡單了解一下程序與執行緒,併發與並行的概念。什麼是協程?我們先來看下對協程的概括 協程被稱為微執行緒或者纖程,是一種使用者態的輕量級執行緒。其本質就是乙個單執行緒,協程的作用就是在乙個執行緒中人為控制 塊的執行順序。記住這句就可以了 具體解釋如下 在乙個執行緒中有很多函式,我們...
python 3 協程函式
1 把函式的執行結果封裝好 iter 和 next 即得到乙個迭代器 2 與return功能類似,都可以返回值,但不同的是,return只能返回一次值,而yield可以返回多次值 3 函式暫停與再繼續的狀態是由yield儲存的 def func count print start while tru...
python3協程數量限制 多工 3 協程
環境 python3.6 非同步io 我們知道,cpu 速度遠遠快於磁碟 網路等 io。在 io 程式設計中,假如乙個 io 操作阻塞了當前執行緒,會導致其他 無法執行,所以我們使用多執行緒或者多程序來併發執行 針對這個問題,我們需要另一種解決方法 非同步 io。非同步 io,即當 需要執行乙個耗時...