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

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

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

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

以yield關(guān)鍵字方式實現(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)

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

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

上述代碼,其實并沒有完全的實現(xiàn)協(xié)程,或者說實現(xiàn)的協(xié)程非常牽強。

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

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

pip install greenlet

即可完成安裝。

greenlet實現(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ù)生成了一個greenlet對象,在該對象中調(diào)用switch()函數(shù)即可切換到指定greenlet對象對應(yīng)的函數(shù)中執(zhí)行,因此可以實現(xiàn)協(xié)程操作。

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

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

在Python3.4以后,asyncio是Python的一個內(nèi)置模塊,因此無需安裝即可調(diào)用。使用asyncio模式實現(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為一個裝飾器,使用該裝飾器后,一個函數(shù)由普通函數(shù)成為了協(xié)程函數(shù)。與之前兩種方式相比,這段代碼實現(xiàn)了協(xié)程遇到I/O阻塞時自動的切換。

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

使用async和await關(guān)鍵字的實現(xiàn)方式,是Python3.5版本以后引入的協(xié)程操作方式,這種方式與第三種本質(zhì)上是相同的,但是由于這兩個關(guān)鍵字的引入,因此協(xié)程的實現(xiàn)比起第三種更加簡介。這種實現(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é)程的實現(xiàn)方式,是Python官方推薦的實現(xiàn)方式,如果Python版本允許,盡量采取這種方式運行。上述代碼執(zhí)行結(jié)果如下所示:

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

相關(guān)文章

  • Python新建項目自動添加介紹和utf-8編碼的方法

    Python新建項目自動添加介紹和utf-8編碼的方法

    這篇文章主要介紹了Python新建項目自動添加介紹和utf-8編碼的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Python通過Selenium獲取Web頁面信息的全指南

    Python通過Selenium獲取Web頁面信息的全指南

    Selenium?是一個功能強大的自動化測試工具,但它也可以用于?web?頁面信息的抓取和分析,下面小編就來和大家詳細介紹一下具體是實現(xiàn)方法吧
    2025-04-04
  • Python數(shù)據(jù)序列化技術(shù)總結(jié)

    Python數(shù)據(jù)序列化技術(shù)總結(jié)

    在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)序列化是一個關(guān)鍵環(huán)節(jié),它允許我們將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為可存儲或可傳輸?shù)母袷?,Python提供了多種數(shù)據(jù)序列化技術(shù),每種技術(shù)都有其獨特的性能優(yōu)勢和適用場景,本文將詳細介紹幾種強大的Python數(shù)據(jù)序列化技術(shù),需要的朋友可以參考下
    2025-03-03
  • Python全棧之運算符詳解

    Python全棧之運算符詳解

    這篇文章主要為大家介紹了Python運算符,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python實現(xiàn)將文件名批量命名為四位數(shù)or五位數(shù)

    python實現(xiàn)將文件名批量命名為四位數(shù)or五位數(shù)

    這篇文章主要介紹了python實現(xiàn)將文件名批量命名為四位數(shù)or五位數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 分享9個好用的Python技巧

    分享9個好用的Python技巧

    大家好,本篇文章主要講的是分享9個好用的Python技巧,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Jupyter Notebook如何導(dǎo)入python文件時的問題

    Jupyter Notebook如何導(dǎo)入python文件時的問題

    這篇文章主要介紹了Jupyter Notebook如何導(dǎo)入python文件時的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Python中無限元素列表的實現(xiàn)方法

    Python中無限元素列表的實現(xiàn)方法

    這篇文章主要介紹了Python中無限元素列表的實現(xiàn)方法,很實用的功能,需要的朋友可以參考下
    2014-08-08
  • Python運行出現(xiàn)DeprecationWarning的問題及解決

    Python運行出現(xiàn)DeprecationWarning的問題及解決

    這篇文章主要介紹了Python運行出現(xiàn)DeprecationWarning的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python3實現(xiàn)計算兩個數(shù)組的交集算法示例

    Python3實現(xiàn)計算兩個數(shù)組的交集算法示例

    這篇文章主要介紹了Python3實現(xiàn)計算兩個數(shù)組的交集算法,結(jié)合2個實例形式總結(jié)分析了Python3針對數(shù)組的遍歷、位運算以及元素的添加、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04

最新評論

林周县| 屏东市| 洪泽县| 大宁县| 大足县| 皋兰县| 临江市| 莱州市| 泰兴市| 天镇县| 厦门市| 肥乡县| 蒙自县| 龙山县| 德惠市| 泾源县| 台中县| 博白县| 思南县| 丹江口市| 洱源县| 平度市| 博乐市| 临夏县| 霍城县| 友谊县| 北碚区| 崇礼县| 鱼台县| 威海市| 女性| 胶州市| 罗定市| 开化县| 遂宁市| 湟源县| 图片| 太和县| 莒南县| 蒙阴县| 衡南县|