欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python協(xié)程的四種實(shí)現(xiàn)方式總結(jié)

 更新時(shí)間:2023年01月14日 14:35:43   作者:永遠(yuǎn)是少年啊  
今天繼續(xù)給大家介紹Python關(guān)知識(shí),本文主要內(nèi)容是Python協(xié)程的四種實(shí)現(xiàn)方式。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、yield關(guān)鍵字實(shí)現(xiàn)方式

以yield關(guān)鍵字方式實(shí)現(xiàn)協(xié)程代碼如下所示:

def fun1():
    yield 1
    yield from fun2()
    yield 2

def fun2():
    yield 3
    yield 4

f1=fun1()
for item in f1:
    print(item)

在上述代碼中,一個(gè)Python函數(shù)中存在由yiled,就說(shuō)明為生成器函數(shù),yield類(lèi)似于普通函數(shù)的return,區(qū)別在于yield返回后Python會(huì)“記住”返回的位置,在下次返回時(shí)就從這個(gè)位置處返回。yiled from關(guān)鍵字后面跟著也是一個(gè)生成器,表示從該生成器返回。

在上述代碼運(yùn)行后,for循環(huán)就是一個(gè)迭代的過(guò)程,隨著迭代,每次fun1()生成器就會(huì)執(zhí)行一次“yield”。因此,上述函數(shù)會(huì)輸出1——3——4——2。該端代碼執(zhí)行結(jié)果如下所示:

上述代碼,其實(shí)并沒(méi)有完全的實(shí)現(xiàn)協(xié)程,或者說(shuō)實(shí)現(xiàn)的協(xié)程非常牽強(qiáng)。

二、greenlet實(shí)現(xiàn)方式

greenlet是一個(gè)Python的第三方模塊,使用時(shí)需要提前安裝。執(zhí)行命令:

pip install greenlet

即可完成安裝。

greenlet實(shí)現(xiàn)協(xié)程代碼如下所示:

from greenlet import greenlet

def fun1():
    print(1)
    gr2.switch()
    print(2)
    gr2.switch()

def fun2():
    print(3)
    gr1.switch()
    print(4)

gr1=greenlet(fun1)
gr2=greenlet(fun2)
gr1.switch()

在上述代碼中,greenlet()函數(shù)生成了一個(gè)greenlet對(duì)象,在該對(duì)象中調(diào)用switch()函數(shù)即可切換到指定greenlet對(duì)象對(duì)應(yīng)的函數(shù)中執(zhí)行,因此可以實(shí)現(xiàn)協(xié)程操作。

上述代碼執(zhí)行結(jié)果如下所示:

三、asyncio實(shí)現(xiàn)方式

在Python3.4以后,asyncio是Python的一個(gè)內(nèi)置模塊,因此無(wú)需安裝即可調(diào)用。使用asyncio模式實(shí)現(xiàn)的Python代碼如下所示:

import asyncio

@asyncio.coroutine
def fun1():
    print(1)
    yield from asyncio.sleep(2)
    print(2)

@asyncio.coroutine
def fun2():
    print(3)
    yield from asyncio.sleep(2)
    print(4)

tasks=[
    asyncio.ensure_future(fun1()),
    asyncio.ensure_future(fun2())
]
loop=asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

在上述代碼中,@asyncio.coroutin為一個(gè)裝飾器,使用該裝飾器后,一個(gè)函數(shù)由普通函數(shù)成為了協(xié)程函數(shù)。與之前兩種方式相比,這段代碼實(shí)現(xiàn)了協(xié)程遇到I/O阻塞時(shí)自動(dòng)的切換。

四、async和await關(guān)鍵字實(shí)現(xiàn)方式

使用async和await關(guān)鍵字的實(shí)現(xiàn)方式,是Python3.5版本以后引入的協(xié)程操作方式,這種方式與第三種本質(zhì)上是相同的,但是由于這兩個(gè)關(guān)鍵字的引入,因此協(xié)程的實(shí)現(xiàn)比起第三種更加簡(jiǎn)介。這種實(shí)現(xiàn)方式Python代碼如下所示:

import asyncio

async def fun1():
    print(1)
    await asyncio.sleep(2)
    print(2)

async def fun2():
    print(3)
    await asyncio.sleep(2)
    print(4)

tasks=[
    asyncio.ensure_future(fun1()),
    asyncio.ensure_future(fun2())
]
loop=asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

這種協(xié)程的實(shí)現(xiàn)方式,是Python官方推薦的實(shí)現(xiàn)方式,如果Python版本允許,盡量采取這種方式運(yùn)行。上述代碼執(zhí)行結(jié)果如下所示:

到此這篇關(guān)于Python協(xié)程的四種實(shí)現(xiàn)方式總結(jié)的文章就介紹到這了,更多相關(guān)Python協(xié)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python ftp上傳文件

    Python ftp上傳文件

    這篇文章主要介紹了Python ftp上傳文件的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Python使用BeautifulSoup4修改網(wǎng)頁(yè)內(nèi)容的實(shí)戰(zhàn)記錄

    Python使用BeautifulSoup4修改網(wǎng)頁(yè)內(nèi)容的實(shí)戰(zhàn)記錄

    BeautifulSoup除了可以查找和定位網(wǎng)頁(yè)內(nèi)容,還可以修改網(wǎng)頁(yè),下面這篇文章主要給大家介紹了關(guān)于Python使用BeautifulSoup4修改網(wǎng)頁(yè)內(nèi)容的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Python爬蟲(chóng)原理與基本請(qǐng)求庫(kù)urllib詳解

    Python爬蟲(chóng)原理與基本請(qǐng)求庫(kù)urllib詳解

    這篇文章主要介紹了Python爬蟲(chóng)原理與基本請(qǐng)求庫(kù)urllib詳解,爬蟲(chóng)就是通過(guò)模擬瀏覽器,按照一定的規(guī)則,自動(dòng)、大批量的獲取網(wǎng)絡(luò)資源,包括文本、圖片、鏈接、音頻、視頻等等,需要的朋友可以參考下
    2023-07-07
  • python中defaultdict方法的使用詳解

    python中defaultdict方法的使用詳解

    這篇文章主要介紹了python中defaultdict方法的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Python中encode和encoding的區(qū)別小結(jié)

    Python中encode和encoding的區(qū)別小結(jié)

    Python是一種非常流行的高級(jí)編程語(yǔ)言,它提供了許多內(nèi)置函數(shù)和庫(kù)來(lái)方便地處理文本數(shù)據(jù),其中,encode和encoding是處理文本編碼的重要概念,本文就來(lái)介紹一下Python中encode和encoding的區(qū)別小結(jié),感興趣的可以了解一下
    2023-11-11
  • python 與服務(wù)器的共享文件夾交互方法

    python 與服務(wù)器的共享文件夾交互方法

    今天小編就為大家分享一篇python 與服務(wù)器的共享文件夾交互方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python驗(yàn)證碼識(shí)別的實(shí)例詳解

    python驗(yàn)證碼識(shí)別的實(shí)例詳解

    現(xiàn)在的網(wǎng)站為了防止機(jī)器人提交表單,圖片驗(yàn)證碼是很常見(jiàn)的應(yīng)對(duì)手段之一。這里就不詳細(xì)介紹了,相信大家都遇到過(guò)?,F(xiàn)在這篇文章就給出用Python識(shí)別驗(yàn)證碼的詳細(xì)示例代碼,文中介紹的很詳細(xì),有需要的可以參考借鑒。
    2016-09-09
  • python3 requests庫(kù)文件上傳與下載實(shí)現(xiàn)詳解

    python3 requests庫(kù)文件上傳與下載實(shí)現(xiàn)詳解

    這篇文章主要介紹了python3 requests庫(kù)文件上傳與下載實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python unix時(shí)間戳轉(zhuǎn)換毫秒的實(shí)現(xiàn)

    python unix時(shí)間戳轉(zhuǎn)換毫秒的實(shí)現(xiàn)

    Unix時(shí)間戳是一種常見(jiàn)的時(shí)間表示方式,本文主要介紹了python unix時(shí)間戳轉(zhuǎn)換毫秒的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Python模擬百度自動(dòng)輸入搜索功能的實(shí)例

    Python模擬百度自動(dòng)輸入搜索功能的實(shí)例

    今天小編就為大家分享一篇Python模擬百度自動(dòng)輸入搜索功能的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02

最新評(píng)論