亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1.協(xié)程

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

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

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

1.1greenlet實現(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)鍵字實現(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模塊實現(xiàn)協(xié)程

再python3.4版本之后才可以用(不用安裝,在標準庫中)

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

@asyncio.coroutine
def func2():
    print(3)
    yield from asyncio.sleep(2)
    print(4)
    
#將兩個協(xié)程函數(shù)封裝成一個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)鍵字實現(xiàn)協(xié)程

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

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


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

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

2.協(xié)程意義

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

#協(xié)程請求資源使用第三方庫aiohttp
import aiohttp

3.異步編程

3.1時間循環(huán)

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

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

import asyncio 

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

3.2案例

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

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

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

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

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

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

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

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

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

3.3await關(guān)鍵字

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

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

await就是等待對象的值得到結(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操作時會掛起當前協(xié)程任務(wù),等IO操作完成后再繼續(xù)往下執(zhí)行,當前協(xié)程掛起時,時間循環(huán)對象可以執(zhí)行其他協(xié)程任務(wù)
  re = await other()
  print("IO請求結(jié)束,結(jié)果為:",re)
  
asyncio.run(func())

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

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

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

相關(guān)文章

  • pandas解決數(shù)據(jù)缺失、重復(fù)的方法與實踐過程

    pandas解決數(shù)據(jù)缺失、重復(fù)的方法與實踐過程

    這篇文章主要介紹了pandas解決數(shù)據(jù)缺失、重復(fù)的方法與實踐過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python中的五個神仙級函數(shù)一起來看看

    Python中的五個神仙級函數(shù)一起來看看

    這篇文章主要為大家介紹了Python中的五個神仙級函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python 多進程通信模塊的簡單實現(xiàn)

    python 多進程通信模塊的簡單實現(xiàn)

    這篇文章主要介紹了python 多進程通信模塊的簡單實現(xiàn),需要的朋友可以參考下
    2014-02-02
  • 使用python將時間轉(zhuǎn)換為指定的格式方法

    使用python將時間轉(zhuǎn)換為指定的格式方法

    今天小編就為大家分享一篇使用python將時間轉(zhuǎn)換為指定的格式方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python操作配置文件實戰(zhàn)記錄

    python操作配置文件實戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于python操作配置文件的相關(guān)資料,配置文件是為程序配置參數(shù)和初始設(shè)置的文件,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • 詳解Python當中的字符串和編碼

    詳解Python當中的字符串和編碼

    這篇文章主要介紹了詳解Python當中的字符串和編碼,代碼基于Python2.x版本,文中所述皆是Python學(xué)習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-04-04
  • 分享Python切分字符串的一個不錯方法

    分享Python切分字符串的一個不錯方法

    今天小編就為大家分享一篇Python切分字符串的一個不錯方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python使用pipeline批量讀寫redis的方法

    python使用pipeline批量讀寫redis的方法

    今天小編就為大家分享一篇python使用pipeline批量讀寫redis的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 對python3標準庫httpclient的使用詳解

    對python3標準庫httpclient的使用詳解

    今天小編就為大家分享一篇對python3標準庫httpclient的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python如何使用字符打印照片

    Python如何使用字符打印照片

    這篇文章主要介紹了Python如何使用字符打印照片,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-01-01

最新評論