簡單了解python協(xié)程的相關(guān)知識
什么是協(xié)程
協(xié)程是python種一種實現(xiàn)多任務(wù)的方式,他是一種比線程更加小的單元,占用更小的執(zhí)行單元(資源),為啥說他是一個執(zhí)行單元,因為他自帶CPU上下文,這樣在合適gr的時機,可以把一個協(xié)程切換到另一個協(xié)程,只要在這個過程中保存和恢復(fù)cpu上下文那么程序還是可以運行的
通俗的理解: 一個線程中的某個函數(shù),可以在任何地方保存當(dāng)前函數(shù)的一些臨時變量,然后切換到另一個函數(shù)中運行,并且切換的次數(shù)以及社么時候再切換回來是可控的
協(xié)程和線程的差異
在實現(xiàn)多任務(wù)時,線程會自己歡子一些數(shù)據(jù),操作系統(tǒng)切換時需要恢復(fù)數(shù)據(jù),所以線程恢復(fù)比較耗性能
協(xié)程底層原理(舉例)
'''
1,協(xié)程的實現(xiàn)原理,底層通過 yield 實現(xiàn)
'''
def work1(): #工作任務(wù)
for i in range(10):
print('work1----{}'.format(i))
yield i
def work2():
for i in range(10):
print('work2----{}'.format(i))
yield i
def work3():
for i in range(10):
print('work3----{}'.format(i))
yield i
g1 = work1()
g2 = work2()
g3 = work3()
while True: #循環(huán)調(diào)用生成器實現(xiàn)任務(wù)切換
try:
print(next(g1))
print(next(g2))
print(next(g3))
except StopIteration :
pass
break
協(xié)程 greenlet
python -m pip install greenlet
示例
'''
1,展示greenelent ,不能自動切換需要手動切換
'''
import greenlet
def work1():
for i in range(10):
print('work1----{}'.format(i))
g2.switch() #切換到g2
def work2():
for i in range(10):
print('work2----{}'.format(i))
g1.switch() #切換到g1
g1 = greenlet.greenlet(work1) #返回協(xié)程對象
g2 = greenlet.greenlet(work2)
g1.switch() #啟動開關(guān)
執(zhí)行順序

gevent
greenlet 已經(jīng)實現(xiàn)了協(xié)程,但是還是人工切換,gevent 提供了自動切換功能,其原理是執(zhí)行過程中遇到IO操作,自動切換
'''
協(xié)程gevent IO操作會切換
'''
import gevent
def work1(): # 工作任務(wù)
for i in range(10):
print('work1----{}'.format(i))
gevent.sleep(0.5)
def work2():
for i in range(10):
print('work2----{}'.format(i))
gevent.sleep(0.5)
g1 = gevent.spawn(work1) #指定工作函數(shù)
g2 = gevent.spawn(work2) #指定工作函數(shù)
g1.join() #等待協(xié)程執(zhí)行完成再往下走
g2.join()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python 協(xié)程 gevent原理與用法分析
- Python協(xié)程操作之gevent(yield阻塞,greenlet),協(xié)程實現(xiàn)多任務(wù)(有規(guī)律的交替協(xié)作執(zhí)行)用法詳解
- python 單線程和異步協(xié)程工作方式解析
- 關(guān)于Python核心框架tornado的異步協(xié)程的2種方法詳解
- python協(xié)程gevent案例 爬取斗魚圖片過程解析
- python多任務(wù)之協(xié)程的使用詳解
- python中的協(xié)程深入理解
- python已協(xié)程方式處理任務(wù)實現(xiàn)過程
相關(guān)文章
python學(xué)生管理系統(tǒng)代碼實現(xiàn)
這篇文章主要為大家詳細(xì)介紹了python學(xué)生管理系統(tǒng)代碼實現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03
Python編程使用Selenium模擬淘寶登錄實現(xiàn)過程
這篇文章主要介紹了Python編程使用Selenium模擬淘寶登錄的實現(xiàn)過程示例及解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-10-10
Python全局變量關(guān)鍵字global的簡單使用
python中g(shù)lobal關(guān)鍵字主要作用是聲明變量的作用域,下面這篇文章主要給大家介紹了關(guān)于Python全局變量關(guān)鍵字global的簡單使用,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
python 實現(xiàn)在無序數(shù)組中找到中位數(shù)方法
這篇文章主要介紹了python 實現(xiàn)在無序數(shù)組中找到中位數(shù)方法,具有很好對參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

