python之協程建立

2021-10-11 09:19:16 字數 2001 閱讀 5574

協程,是充分利用cpu給該執行緒的時間,在乙個執行緒裡放置多個任務,當某個任務阻塞時就執行下乙個任務。其特點是能夠記住這些任務執行到哪一步了,下次再執行該任務的時候回從上次阻塞的地方繼續開始。建立協程需要使用gevent模組。**如下:

import gevent

'''gevent協程中,遇到需要耗費時間的操作就會跳轉到下乙個任務。

但是此處的延時、堵塞或者其他耗時的操作,都必須換到gevent模組下的'''。

deff

(n):

for i in

range

(n):

print

(gevent.getcurrent(

), i)

# getcurrent()函式會獲取到當前的協程號

gevent.sleep(

0.5)

# 如果沒有使用monkey,則需要這樣寫才能呼叫時間模組。

# 建立3個任務物件

g1 = gevent.spawn(f,5)

# 第乙個引數指定這個任務到那裡去執行,第二個引數傳入需要值。

g2 = gevent.spawn(f,5)

g3 = gevent.spawn(f,5)

g1.join(

)# join()方法會造成主線程堵塞,必須等該任務完全結束後才能接堵塞。

g1.join(

)g1.join(

)

d:\super\anaconda\python.exe d:/super/python_file/study/8.網路程式設計/9-協程gevent.py00

0111

2223

3344

4000

1112

2233

3444

值得注意的是,在協程中,所有的耗時操作,都必須換成gevent模組下的。或者呼叫gevent中的monkey,這樣就可以正常使用以前的模組了。

from gevent import monkey

import gevent

import time

'''gevent協程中,遇到需要耗費時間的操作就會跳轉到下乙個任務。

但是此處的延時、堵塞或者其他耗時的操作,都必須換到gevent模組下的'''

monkey.patch_all(

)# 將程式中用到的耗時的操作的**,換為gevent中自己實現的模組。

deff

(n):

for i in

range

(n):

print

(gevent.getcurrent(

), i)

# getcurrent()函式會獲取到當前的協程號

#gevent.sleep(0.5) # 如果沒有使用monkey,則需要這樣寫才能呼叫時間模組。

time.sleep(

0.5)

# 因為使用了monkey,所以此處可以正常使用時間模組。其他耗時操作也是如此。

# 建立3個任務物件

g1 = gevent.spawn(f,5)

# 第乙個引數指定這個任務到那裡去執行,第二個引數傳入需要值。

g2 = gevent.spawn(f,5)

g3 = gevent.spawn(f,5)

g1.join(

)# join()方法會造成主線程堵塞,必須等該任務完全結束後才能接堵塞。

g1.join(

)g1.join(

)# 下面這行**,將建立的任務放到乙個列表中去,在放到joinall()這個方法中,它將在所有任務都結束後才能解堵塞。

gevent.joinall(

[gevent.spawn(f,5)

,gevent.spawn(f,5)

,gevent.spawn(f,5)

])

這裡呼叫monkey.patch_all(),則下面的sleep()可以正常使用time模組下的。

Python之協程技術

1.定義 纖程,微執行緒。是允許在不同入口點不同位置暫停或開始的電腦程式,簡單來說,協程就是可以暫停執行的函式。2.協程原理 記錄乙個函式的上下文,協程排程切換時會將記錄的上下文儲存,在切換回來時進行調取,恢復原有的執行內容,以便從上一次執行位置繼續執行。協程本質上就是乙個執行緒,以前多執行緒任務的...

Python 高階 之 協程

協程的概念級描述 與執行緒對比 知乎 鏈結 執行緒有兩個必須要處理的問題 一是碰著阻塞式i o會導致整個程序被掛起 二是由於缺乏時鐘阻塞,程序需要自己擁有排程執行緒的能力。如果一種實現使得每個執行緒需要自己通過呼叫某個方法,主動交出控制權。那麼我們就稱這種執行緒是協作式的,即是協程。在python中...

Python學習之協程

我們都知道執行緒間的任務切換是由作業系統來控制的,而協程的出現,就是為了減少作業系統的開銷,由協程來自己控制任務的切換 協程本質上就是執行緒。既然能夠切換任務,所以執行緒有兩個最基本的功能 一是儲存狀態 二是任務切換 8.8.1 協程的特點 優點 缺點 特點 8.8.2 greenlet 使用gre...