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

Python異步編程之協(xié)程任務(wù)的調(diào)度操作實(shí)例分析

 更新時(shí)間:2020年02月01日 11:36:05   作者:dayL_W  
這篇文章主要介紹了Python異步編程之協(xié)程任務(wù)的調(diào)度操作,結(jié)合實(shí)例形式分析了Python異步編程中協(xié)程任務(wù)的調(diào)度相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python異步編程之協(xié)程任務(wù)的調(diào)度操作。分享給大家供大家參考,具體如下:

我們知道協(xié)程是異步進(jìn)行的,碰到IO阻塞型操作時(shí)需要調(diào)度其他任務(wù),那么這個(gè)調(diào)度規(guī)則或者是算法是怎樣的呢?現(xiàn)在有以下幾個(gè)疑問:

1、多個(gè)任務(wù)準(zhǔn)備好,需要運(yùn)行時(shí),優(yōu)先執(zhí)行哪一個(gè)?

2、一個(gè)任務(wù)運(yùn)行時(shí),如果別的任務(wù)準(zhǔn)備好了,是否需要中斷當(dāng)前任務(wù)呢?

在網(wǎng)上找了很多資料,也無法找到相關(guān)的資料,于是編寫了幾個(gè)簡單的程序,查看任務(wù)的執(zhí)行過程。

根據(jù)Python的asyncio我們可以編寫一個(gè)簡單的程序:

import asyncio
async def a(x):
  while x>0:
    print('a:',x)
    await asyncio.sleep(0.5)
    x -= 1
async def b(x):
  while x>0:
    print('b:',x)
    await asyncio.sleep(1.8)
    x -= 1
async def c(x):
  while x>0:
    print('c:',x)
    await asyncio.sleep(1.5)
    x -= 1
loop = asyncio.get_event_loop()
tasks = [a(2),b(2),c(2)]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

我們創(chuàng)建一個(gè)loop事件,把a(bǔ),b,c3個(gè)函數(shù)加入到任務(wù)中,用asyncio.sleep(1)來切換運(yùn)行其他程序。運(yùn)行結(jié)果如下:

b: 2
c: 2
a: 2
a: 1
c: 1
b: 1

這里一直有一個(gè)疑問,開始運(yùn)行任務(wù)時(shí),3個(gè)任務(wù)同時(shí)準(zhǔn)備好,為什么執(zhí)行順序是b,a,c。

我們分析一下函數(shù)的執(zhí)行過程,先執(zhí)行b,然后阻塞,執(zhí)行c,阻塞,再執(zhí)行a,阻塞。函數(shù)調(diào)用過程是b->c->a,0.5s過后a完成,1.5s過后c完成,1.8s過后b完成。

修改睡眠時(shí)間,我們可以測(cè)試出很多情況,最后得出了任務(wù)調(diào)度的規(guī)則,可能有一些地方總結(jié)的不對(duì),歡迎大家來指正。

1、初始化,asyncio把需要執(zhí)行的任務(wù)加入到任務(wù)隊(duì)列中。

2、從隊(duì)首拿出一個(gè)任務(wù)來運(yùn)行,如果任務(wù)被阻塞,則拿另一個(gè)任務(wù)隊(duì)列,在任務(wù)切換是需要保存每個(gè)任務(wù)的工作環(huán)境。

3、把IO的完成,定時(shí)時(shí)間到的時(shí)間加入到事件隊(duì)列,從隊(duì)首中拿出事件去喚醒相應(yīng)的任務(wù)。

好像看起來很簡單,又有點(diǎn)像操作系統(tǒng),又有點(diǎn)像中斷,但是操作系統(tǒng)是感知不到它的存在,更沒有調(diào)用中斷了。這里我們要注意,加入有一個(gè)任務(wù)正在運(yùn)行,同時(shí)有一個(gè)事件發(fā)生,asyncio是不會(huì)中斷當(dāng)前任務(wù)的,而是等這個(gè)任務(wù)碰到了阻塞才會(huì)處理這個(gè)事件,所以編程時(shí)需要把任務(wù)分的很細(xì),盡量不要讓任務(wù)執(zhí)行過長的時(shí)間。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python進(jìn)程與線程操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》、《Python+MySQL數(shù)據(jù)庫程序設(shè)計(jì)入門教程》及《Python常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python 日志模塊 日志等級(jí)設(shè)置失效的解決方案

    python 日志模塊 日志等級(jí)設(shè)置失效的解決方案

    這篇文章主要介紹了python 日志模塊 日志等級(jí)設(shè)置失效的問題及解決方案,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • PyCharm對(duì)接DeepSeek大模型的操作流程

    PyCharm對(duì)接DeepSeek大模型的操作流程

    以下是使用 PyCharm 對(duì)接 DeepSeek 大模型的詳細(xì)操作流程,基于 Python 開發(fā)環(huán)境,假設(shè)你已具備 DeepSeek API 的訪問權(quán)限(需提前申請(qǐng) API Key),需要的朋友可以參考下
    2025-03-03
  • 如何解決安裝包過程中的Requirement already satisfied:問題

    如何解決安裝包過程中的Requirement already satisfied:問題

    這篇文章主要介紹了如何解決安裝包過程中的Requirement already satisfied:問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • python實(shí)現(xiàn)音樂播放和下載小程序功能

    python實(shí)現(xiàn)音樂播放和下載小程序功能

    這篇文章主要介紹了python實(shí)現(xiàn)音樂播放和下載小程序功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Tensorflow簡單驗(yàn)證碼識(shí)別應(yīng)用

    Tensorflow簡單驗(yàn)證碼識(shí)別應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了Tensorflow簡單驗(yàn)證碼識(shí)別應(yīng)用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • (手寫)PCA原理及其Python實(shí)現(xiàn)圖文詳解

    (手寫)PCA原理及其Python實(shí)現(xiàn)圖文詳解

    這篇文章主要介紹了Python來PCA算法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望能給你帶來幫助
    2021-08-08
  • vue+element-ui動(dòng)態(tài)加載本地圖片方式

    vue+element-ui動(dòng)態(tài)加載本地圖片方式

    這篇文章主要介紹了vue+element-ui動(dòng)態(tài)加載本地圖片方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 對(duì)Python3中的print函數(shù)以及與python2的對(duì)比分析

    對(duì)Python3中的print函數(shù)以及與python2的對(duì)比分析

    下面小編就為大家分享一篇對(duì)Python3中的print函數(shù)以及與python2的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python如何發(fā)送與接收大型數(shù)組

    Python如何發(fā)送與接收大型數(shù)組

    這篇文章主要介紹了Python如何發(fā)送與接收大型數(shù)組,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 基于pykeyboard的用法說明

    基于pykeyboard的用法說明

    這篇文章主要介紹了基于pykeyboard的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評(píng)論

乌恰县| 土默特右旗| 凤台县| 尉犁县| 阿克陶县| 沅陵县| 固始县| 朝阳区| 潼关县| 青浦区| 兴山县| 平江县| 桂林市| 紫金县| 双流县| 宝丰县| 安福县| 曲麻莱县| 井研县| 曲沃县| 重庆市| 莲花县| 尉氏县| 刚察县| 海晏县| 济南市| 漾濞| 吐鲁番市| 陵川县| 盱眙县| 西和县| 新郑市| 句容市| 惠东县| 肥城市| 新乐市| 通江县| 红河县| 阿拉善盟| 文成县| 长岛县|