協程的意義:利用堵塞/延時時間做其他操作
協程依賴於執行緒,執行緒依賴於程序
import gevent
import time
from gevent import monkey
# 監測整個**耗時的位置,將程式中耗時操作的**,換成gevent中自己實現的模組
monkey.patch_all() # 不需要改time 和 gevent 之間增加
def f(n):
for i in range(n):
print(gevent.getcurrent(), i)
# gevent.sleep(0.1) # 自帶的延時才能啟動延時自動切換
time.sleep(0.5)
g1 = gevent.spawn(f, 5) # 建立物件1
g2 = gevent.spawn(f, 5) # 建立物件2
g3 = gevent.spawn(f, 5) # 建立物件3
g1.join() # 遇到延時自動切換下乙個
g2.join() # 遇到延時自動切換下乙個
g3.join() # 遇到延時自動切換下乙個
# 用joinall批量執行,不需要逐個join
實現多工
多工介紹 簡單來說就是作業系統可以同時執行過個任務 單核cpu作業系統會讓各個任務交替執行 真正的多工只能在多核cpu上實現,也就是並行和併發2 併發 併發 指的是任務數多於cpu核數,通過作業系統的各種任務排程演算法,實現用多個任務 一起 執行 實際上總有一些任務不在執行,因為切換任務的速度相當快...
Python 多工之協程(3)實現多工
學習理解迭代器和生成器之後,開始使用協程來實現多工 當乙個函式中包含yield關鍵字,那麼這個函式就不再是乙個普通的函式,它的返回值是乙個生成器物件。我們可以使用next 或send 函式來啟動喚醒生成器物件,當程式第一次執行到yield時,程式暫停執行,並返回yield後邊跟的變數,當再次喚醒時,...
yield實現多工演示
import time deftask1 任務1函式 i 0while true print in task1 time.sleep 1 主程式中通過next 拿到yield後面的值 生成器物件.send 傳送的資料 這時傳送的資料傳遞到yield,當做yield的返回值 result yield ...