最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你了解Python協(xié)程的詳細(xì)解釋以及例子

 更新時(shí)間:2023年03月30日 09:03:25   作者:智健  
協(xié)程不是計(jì)算機(jī)提供的,計(jì)算機(jī)只提供:進(jìn)程、線程。協(xié)程是人工創(chuàng)造的一種用戶態(tài)切換的微進(jìn)程,使用一個(gè)線程去來(lái)回切換多個(gè)進(jìn)程,本文就來(lái)通過(guò)一些示例和大家詳細(xì)聊聊Python中的協(xié)程吧

1.協(xié)程

協(xié)程不是計(jì)算機(jī)提供的,計(jì)算機(jī)只提供:進(jìn)程、線程。協(xié)程時(shí)人工創(chuàng)造的一種用戶態(tài)切換的微進(jìn)程,使用一個(gè)線程去來(lái)回切換多個(gè)進(jìn)程

實(shí)現(xiàn)協(xié)程的幾種方法

  • greenlet:早期模塊
  • yield關(guān)鍵字:可以保存代碼,保存狀態(tài)
  • asyncio裝飾器(3.4)
  • async、await關(guān)鍵字(3.5)【推薦】

1.1greenlet實(shí)現(xiàn)協(xié)程

pip install greenlet

from greenlet import greenlet
def fun1():
  gre2.switch()#切換到fun2
  pass
def fun2():
  gre1.switch()#切換到fun1
  pass
gre1 = greenlet(func1)
gre2 = greenlet(func2)
gre1.switch()#先去執(zhí)行fun1

1.2yield關(guān)鍵字實(shí)現(xiàn)協(xié)程

def func1():
    yield 1
    yield from func2()
    yield 2
    
def func2():
    yield 3
    yield 4
f1 = func1()
for item in f1:
    print(item,end=" ")
    
#打印結(jié)果
1 3 4 2

1.3使用asyncio模塊實(shí)現(xiàn)協(xié)程

再python3.4版本之后才可以用(不用安裝,在標(biāo)準(zhǔn)庫(kù)中)

import asyncio
#使用該裝飾器裝飾后,該函數(shù)就是一個(gè)協(xié)程函數(shù)
@asyncio.coroutine
def func1():
    print(1)
    #遇到IO操作時(shí),會(huì)自動(dòng)切換到taks中的其他任務(wù)函數(shù)
    yield from asyncio.sleep(2)
    print(2)

@asyncio.coroutine
def func2():
    print(3)
    yield from asyncio.sleep(2)
    print(4)
    
#將兩個(gè)協(xié)程函數(shù)封裝成一個(gè)tasks列表
tasks = [
    asyncio.ensure_future(func1()),
    asyncio.ensure_future(func2())
]
#
loop = asyncio.get_event_loop()
loop.run_until_complete(func1())

1.4async & await關(guān)鍵字實(shí)現(xiàn)協(xié)程

import asyncio
#使用該裝飾器裝飾后,該函數(shù)就是一個(gè)協(xié)程函數(shù)

async def func1():
    print(1)
    #遇到IO操作時(shí),會(huì)自動(dòng)切換到tasks中的其他任務(wù)函數(shù)
    await asyncio.sleep(2)
    print(2)


async def func2():
    print(3)
    await asyncio.sleep(2)
    print(4)
    
#將兩個(gè)協(xié)程函數(shù)封裝成一個(gè)tasks列表
tasks = [
    asyncio.ensure_future(func1()),
    asyncio.ensure_future(func2())
]

loop = asyncio.get_event_loop()
loop.run_until_complete(tasks)

2.協(xié)程意義

在線程中如果遇到IO等待時(shí)間,線程不會(huì)傻等著,會(huì)利用空閑的時(shí)間去做其他事情,也就是進(jìn)程異步執(zhí)行。

#協(xié)程請(qǐng)求資源使用第三方庫(kù)aiohttp
import aiohttp

3.異步編程

3.1時(shí)間循環(huán)

理解成一個(gè)死循環(huán),去檢測(cè)并執(zhí)行某些代碼

#偽代碼
任務(wù)列表 = [task1,task2...]
while True:
  for 就緒任務(wù) in 可執(zhí)行任務(wù)列表:
    執(zhí)行
  for 已完成任務(wù) in 已完成任務(wù)列表:
    從任務(wù)列表中刪除

import asyncio 

#生成一個(gè)書(shū)簡(jiǎn)循環(huán)
loop = asyncio.get_event_loop()
#將任務(wù)放到任務(wù)列表中
loop.run_until_complete(任務(wù))

3.2案例

協(xié)程函數(shù),

定義函數(shù)的時(shí)候,用async def 函數(shù)名

協(xié)程對(duì)象:執(zhí)行協(xié)程函數(shù)的時(shí)候得到一個(gè)協(xié)程對(duì)象

async def func():
  pass
result = func()

注意:執(zhí)行協(xié)程函數(shù)時(shí)得到的協(xié)程對(duì)象,函數(shù)內(nèi)部代碼不會(huì)執(zhí)行

import asyncio
async def func():
  print("哈嘍")

f = func()#協(xié)程對(duì)象

loop = asyncio.get_event_loop()#創(chuàng)建循環(huán)對(duì)象
loop.run_until_complete(f)#通過(guò)循環(huán)對(duì)象執(zhí)行協(xié)程對(duì)象

#python3.7可以直接
asyncio.run(f)

3.3await關(guān)鍵字

await + 可等待的對(duì)象 {協(xié)程對(duì)象,F(xiàn)uture對(duì)象,Task對(duì)象} (類似于I O 等待)

import asyncio
async def func():
  print("哈嘍")
  re = await asyncio.sleep(2)
	print(re)
asyncio.run(func())

await就是等待對(duì)象的值得到結(jié)果后再繼續(xù)向下執(zhí)行

import asyncio
async def other():
  print("start")
  await asyncio.sleep(2)
  print("end")
  return 1

async def fun():
  print("執(zhí)行協(xié)程函數(shù)內(nèi)部代碼")
  #遇到IO操作時(shí)會(huì)掛起當(dāng)前協(xié)程任務(wù),等IO操作完成后再繼續(xù)往下執(zhí)行,當(dāng)前協(xié)程掛起時(shí),時(shí)間循環(huán)對(duì)象可以執(zhí)行其他協(xié)程任務(wù)
  re = await other()
  print("IO請(qǐng)求結(jié)束,結(jié)果為:",re)
  
asyncio.run(func())

執(zhí)行結(jié)果 

執(zhí)行協(xié)程函數(shù)內(nèi)部代碼
start
end
IO請(qǐng)求結(jié)束,結(jié)果為: 1

到此這篇關(guān)于一文帶你了解Python協(xié)程的詳細(xì)解釋以及例子的文章就介紹到這了,更多相關(guān)Python協(xié)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)類似Netty功能的異步編程

    python實(shí)現(xiàn)類似Netty功能的異步編程

    本文將介紹如何使用Python來(lái)實(shí)現(xiàn)本文將介紹如何使用Python來(lái)實(shí)現(xiàn)類似于Netty的功能,并提供一些代碼示例來(lái)幫助讀者理解,能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • python爬取指定微信公眾號(hào)文章

    python爬取指定微信公眾號(hào)文章

    這篇文章主要為大家詳細(xì)介紹了python爬取指定微信公眾號(hào)文章,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python?+?Tkinter連接本地MySQL數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)現(xiàn)注冊(cè)登錄

    Python?+?Tkinter連接本地MySQL數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)現(xiàn)注冊(cè)登錄

    這篇文章主要介紹了Python?+?Tkinter連接本地MySQL數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)現(xiàn)注冊(cè)登錄。下面文章著情介紹,需要的小伙伴可以參考一下
    2022-01-01
  • python用類實(shí)現(xiàn)文章敏感詞的過(guò)濾方法示例

    python用類實(shí)現(xiàn)文章敏感詞的過(guò)濾方法示例

    這篇文章主要介紹了python用類實(shí)現(xiàn)文章敏感詞的過(guò)濾方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 關(guān)于Python列表元素排序操作sort()、min()、max()函數(shù)用法

    關(guān)于Python列表元素排序操作sort()、min()、max()函數(shù)用法

    這篇文章主要介紹了關(guān)于Python列表元素排序操作sort()、min()、max()函數(shù)用法,python中提供了列表元素的操作函數(shù),那么這些函數(shù)該怎么使用呢,感興趣的朋友一起來(lái)看看吧
    2023-04-04
  • Pygame做一期吃豆子游戲的示例代碼

    Pygame做一期吃豆子游戲的示例代碼

    這篇文章主要介紹了Pygame做一期吃豆子游戲的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python數(shù)據(jù)可視化詳解

    Python數(shù)據(jù)可視化詳解

    數(shù)據(jù)可視化是一種將龐雜抽象的數(shù)據(jù)轉(zhuǎn)化為直觀易懂的圖形的數(shù)據(jù)呈現(xiàn)技術(shù),它能幫助我們快速把握數(shù)據(jù)的分布和規(guī)律,更加輕松地理解和探索信息,本文通過(guò)代碼圖片詳細(xì)介紹了Python數(shù)據(jù)可視化,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • python根據(jù)文章標(biāo)題內(nèi)容自動(dòng)生成摘要的實(shí)例

    python根據(jù)文章標(biāo)題內(nèi)容自動(dòng)生成摘要的實(shí)例

    今天小編就為大家分享一篇python根據(jù)文章標(biāo)題內(nèi)容自動(dòng)生成摘要的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python 時(shí)間處理datetime實(shí)例

    Python 時(shí)間處理datetime實(shí)例

    Python Cook書(shū)中有很多章節(jié)都是針對(duì)某個(gè)庫(kù)的使用進(jìn)行介紹或是通過(guò)組合多個(gè)函數(shù)實(shí)現(xiàn)一些復(fù)雜的功能。我這里直接跳過(guò)了上一章節(jié)中對(duì)于文件處理的一些章節(jié),直接進(jìn)入對(duì)時(shí)間操作的章節(jié)。
    2008-09-09
  • Python網(wǎng)絡(luò)編程之HTTP協(xié)議的python應(yīng)用

    Python網(wǎng)絡(luò)編程之HTTP協(xié)議的python應(yīng)用

    HTTP是在網(wǎng)絡(luò)上傳輸HTML的協(xié)議,用于瀏覽器和服務(wù)器的通信,這篇文章主要介紹了Python網(wǎng)絡(luò)編程之HTTP協(xié)議的python應(yīng)用,需要的朋友可以參考下
    2022-11-11

最新評(píng)論

凤庆县| 苏尼特右旗| 枝江市| 珲春市| 洛隆县| 白玉县| 八宿县| 武陟县| 光山县| 西峡县| 晋江市| 祥云县| 平舆县| 平邑县| 丰镇市| 承德市| 新兴县| 锡林浩特市| 汉阴县| 柘城县| 精河县| 垫江县| 嘉定区| 曲麻莱县| 凯里市| 汝阳县| 黎城县| 洱源县| 大余县| 临高县| 丰原市| 开化县| 马尔康县| 杭锦后旗| 双流县| 托克逊县| 虞城县| 白朗县| 布尔津县| 临朐县| 泸西县|