python3協程學習筆記

2021-10-25 17:07:53 字數 914 閱讀 1172

在此之前,協程對我來說是乙個比較陌生的概念,學習之後,發現其應用場景還是有不少,大師之言:

協程能自然地表述很多演算法,例如**、遊戲、非同步i/o,以及其他事件驅動型邊吃形式活協作式多工。

舉例來說,asyncio、tornado、twisted、simpy庫都是基於協程特性在單個執行緒中管理多個併發活動。

def

******_coroutine()

:print

("start"

) x =

yield

print

("coroutine received:" x)

my_coro = ******_coroutine(

)next

(my_coro)

ouput: start

my_coro.send(99)

output:coroutine received:

99traceback(most recent call last):.

..stopiteration

協程使用生成器函式定義:定義體中有yield關鍵字;

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,即當 需要執行乙個耗時...