簡單的python協程

2021-10-08 06:49:27 字數 971 閱讀 3121

首先要了解兩個概念

上下文在每個任務執行前,cpu都需要知道任務從**載入,又是從**開始運 行,也就是說,需要系統事先幫他設定好cpu暫存器和程式計數器(program counter,pc)

cpu暫存器,是cpu內建的容量小、但速度極快的記憶體。程式計數器,則是用來儲存cpu正在執行的指令的位置,或者即將執行的下一條指令的位置。他們都是cpu在執行任何任務前,必須依賴的環境,因此也被叫做cpu上下文。

知道了什麼是cpu上下文,也就很容易理解cpu上下文切換。cpu上下文切換,就是先把前乙個任務的cpu上下文(也就是cpu暫存器和程式計數器)儲存起來,然後載入新任務的上下文,到這些暫存器和程式計數器,最後再跳轉到程式計數器所指的新位置,執行新任務

io操作

磁碟io : 讀取寫入檔案

io操作比較耗時,如果程式io設計不好,非常影響效能

一般情況下,為了避免阻塞自動切換協程,程式啟動時要執行 monkey.patch_all()解決

import time

import gevent

from gevent import monkey

monkey.patch_all(

)def

test1

(n):

for i in

range

(n):

print

('test1----'

, i)

# 因為 執行了 monkey.path_all() 所以當使用time來模擬耗時時也開始實現

time.sleep(1)

gevent.joinall(

[ gevent.spawn(test1,5)

, gevent.spawn(test1,5)

, gevent.spawn(test1,5)

])

?注:紙上得來終覺淺,絕知此事要躬行

python協程使用 協程的案例

概念 使用者層面在乙個執行緒中進行多工切換的機制,比執行緒更加輕量級 實現併發量更大 協程的使用 使用第三方庫 gevent gevent 是乙個基於協程的 python 網路庫,在遇到 io 阻塞時,程式會自動進行切換,可以讓我們用同步的放肆寫非同步 io 協程的使用 from gevent im...

python協程與非同步協程

在前面幾個部落格中我們一一對應解決了消費者消費的速度跟不上生產者,浪費我們大量的時間去等待的問題,在這裡,針對業務邏輯比較耗時間的問題,我們還有除了多程序之外更優的解決方式,那就是協程和非同步協程。在引入這個概念之前我們先看 看這個圖 從這個我們可以看出來,假如來了9個任務,即使我們開了多程序,在業...

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

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