6 65gevent 實現多工

2021-10-04 23:31:04 字數 1213 閱讀 7403

協程的意義:利用堵塞/延時時間做其他操作

協程依賴於執行緒,執行緒依賴於程序

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 ...