91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python協程的四種實現方式是什么

發布時間:2023-01-16 09:25:54 來源:億速云 閱讀:96 作者:iii 欄目:開發技術

本篇內容主要講解“Python協程的四種實現方式是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python協程的四種實現方式是什么”吧!

一、yield關鍵字實現方式

以yield關鍵字方式實現協程代碼如下所示:

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

def fun2():
    yield 3
    yield 4

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

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

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

Python協程的四種實現方式是什么

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

二、greenlet實現方式

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

pip install greenlet

即可完成安裝。

greenlet實現協程代碼如下所示:

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()函數生成了一個greenlet對象,在該對象中調用switch()函數即可切換到指定greenlet對象對應的函數中執行,因此可以實現協程操作。

上述代碼執行結果如下所示:

Python協程的四種實現方式是什么

三、asyncio實現方式

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

四、async和await關鍵字實現方式

使用async和await關鍵字的實現方式,是Python3.5版本以后引入的協程操作方式,這種方式與第三種本質上是相同的,但是由于這兩個關鍵字的引入,因此協程的實現比起第三種更加簡介。這種實現方式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))

這種協程的實現方式,是Python官方推薦的實現方式,如果Python版本允許,盡量采取這種方式運行。上述代碼執行結果如下所示:

Python協程的四種實現方式是什么

到此,相信大家對“Python協程的四種實現方式是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大化| 柏乡县| 聊城市| 乐陵市| 永胜县| 鄂尔多斯市| 普格县| 武威市| 洱源县| 揭阳市| 湘潭县| 余姚市| 华阴市| 太和县| 宝山区| 延长县| 通山县| 屏东县| 凤山县| 如东县| 福贡县| 北票市| 新津县| 溧阳市| 临澧县| 丘北县| 扎鲁特旗| 原平市| 小金县| 遵化市| 桑植县| 阿拉尔市| 卢龙县| 江源县| 海盐县| 许昌县| 罗江县| 郯城县| 开化县| 莱州市| 漳浦县|