Python基礎 協程

2022-09-16 00:15:30 字數 1483 閱讀 5636

協程是一種使用者態的輕量級執行緒,本質上是單執行緒

協程擁有自己的暫存器上下文和棧。協程排程切換時,將暫存器上下文和棧儲存到其他地方,在切回來的時候,恢復先前儲存的暫存器上下文和棧。

使用greenlet實現協程操作,greenlet需要手動進行切換

首先需要使用greenlet建立類似與堆疊空間,然後使用switch進行切換

使用gevent實現協程,無需手動切換,遇到io操作就會進行切換

import gevent

def func1(num):

print('in func1',num)

gevent.sleep(1) #模仿io操作

print('back func1')

def func2():

print('in func2')

gevent.sleep(2) #模仿io操作

print('back func2')

def func3():

print('in func3')

gevent.sleep(3)

print('back func3')

gevent.joinall([

gevent.spawn(func1,1),  #傳參的方式

先執行func1,列印第一句後遇到io操作切換到func3又遇到io,再次切換到func2,遇到io操作後由於沒有可執行的函式,開始等待,func1最先可執行自動跳轉到func1列印第二句,然後func2io操作結束輸出func2的第二句,最後func3才結束io操作,所有func3的第二句最後列印

事件驅動模式:每次有乙個事件發生的時候會首先存入到乙個訊息佇列中,然後會有專門的函式迴圈不斷的從佇列中取出事件進行處理,執行完乙個事件後一般會執行乙個**函式來告知當前事件處理完畢。

非同步操作也算是一種事件驅動的模式,遇到io操作的時候交個作業系統來執行,io操作結束後會執行乙個**函式告知程式io結束可繼續執行

Python基礎 34 協程

概述 協程,又稱微執行緒,也稱為使用者級執行緒,在不開闢執行緒的基礎上完成多工,也就是在單執行緒的情況下完成多工,多個任務按照一定順序交替執行,通俗理解只要在def裡面只看到乙個yield關鍵字,就表示它是協程 簡單理解 協程是實現多工的一種方式 1 無需執行緒上下文切換的開銷,協程避免了無意義的排...

python基礎 協程詳解

python的yield不但可以返回乙個值,它還可以接收呼叫者發出的引數。來看例子 傳統的生產者 消費者模型是乙個執行緒寫訊息,乙個執行緒取訊息,通過鎖機制控制佇列和等待,但一不小心就可能死鎖。如果改用協程,生產者生產訊息後,直接通過yield跳轉到消費者開始執行,待消費者執行完畢後,切換回生產者繼...

Python基礎 協程(一)

究竟什麼是協程?1.涉及到同步鎖。2.涉及到執行緒阻塞狀態和可執行狀態之間的切換。3.涉及到執行緒上下文的切換。以上涉及到的任何一點,都是非常耗費效能的操作。next 函式用來建立乙個協程嗷 yield會暫停,當send 的時候才會繼續 python中使用async await來使用協程 impor...