python 併發程式設計 協程 greenlet模組

2022-09-16 05:06:16 字數 1049 閱讀 7397

不敢是yield,還是greenlet都沒有實現檢測io,實現遇到io切換效果

如果我們在單個執行緒內有20個任務,要想實現在多個任務之間切換,使用yield生成器的方式過於麻煩(需要先得到初始化一次的生成器,然後再呼叫send。。。非常麻煩),而使用greenlet模組可以非常簡單地實現這20個任務直接的切換

安裝greenlet模組

pip3 install greenlet

switch() 啟動

#

安裝:pip3 install greenlet

from greenlet import

greenlet

defeat(name):

print("

%s:eat 1

" %name)

g2.switch(

"mike")

print("

%s:eat 2

" %name)

g2.switch()

defplay(name):

print("

%s:play 1

" %name)

g1.switch()

print("

%s:play 2

" %name)

g1 =greenlet(eat)

g2 =greenlet(play)

g1.switch(

"mike

") #

可以在第一次switch時傳入引數,以後都不需要

'''mike:eat 1

mike:play 1

mike:eat 2

mike:play 2

'''

greenlet只是提供了一種比generator更加便捷的切換方式,當切到乙個任務執行時如果遇到io,那就原地阻塞,仍然是沒有解決遇到io自動切換來提公升效率的問題。

單執行緒裡的這20個任務的**通常會既有計算操作又有阻塞操作,我們完全可以在執行任務1時遇到阻塞,就利用阻塞的時間去執行任務2,如此,才能提高效率,這就用到了gevent模組。

python 併發程式設計 協程 協程介紹

協程 是單執行緒下的併發,又稱微執行緒,纖程。英文名coroutine。一句話說明什麼是執行緒 協程是一種使用者態的輕量級執行緒,即協程是由使用者程式自己控制排程的 需要強調的是 1.python的執行緒屬於核心級別的,即由作業系統控制排程 如單執行緒遇到io或執行時間過長就會被迫交出cpu執行許可...

Python 併發程式設計(協程)

本章節主要介紹,使用單執行緒實現併發,即只用乙個主線程 很明顯可利用cpu只有乙個 為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態 單執行緒下併發稱為 協程 特點 缺點 gevent 是乙個...

併發程式設計 協程

一 協程介紹 協程 是單執行緒下的併發,又稱微執行緒,纖程。英文名coroutine。一句話說明什麼是執行緒 協程是一種使用者態的輕量級執行緒,即協程是由使用者程式自己控制排程的。需要強調的是 對比作業系統控制線程的切換,使用者在單執行緒內控制協程的切換 優點如下 缺點如下 總結 必須在只有乙個單執...