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

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

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

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

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

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

2、一個任務運行時,如果別的任務準備好了,是否需要中斷當前任務呢?

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

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

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)建一個loop事件,把a,b,c3個函數(shù)加入到任務中,用asyncio.sleep(1)來切換運行其他程序。運行結(jié)果如下:

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

這里一直有一個疑問,開始運行任務時,3個任務同時準備好,為什么執(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完成。

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

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

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

3、把IO的完成,定時時間到的時間加入到事件隊列,從隊首中拿出事件去喚醒相應的任務。

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

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

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • python 日志模塊 日志等級設置失效的解決方案

    python 日志模塊 日志等級設置失效的解決方案

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

    PyCharm對接DeepSeek大模型的操作流程

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

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

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

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

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

    Tensorflow簡單驗證碼識別應用

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

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

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

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

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

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

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

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

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

    基于pykeyboard的用法說明

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

最新評論

句容市| 永靖县| 布拖县| 罗甸县| 朔州市| 罗城| 准格尔旗| 修文县| 聊城市| 罗源县| 遵化市| 二连浩特市| 乡城县| 柘城县| 桦川县| 木兰县| 九龙城区| 岗巴县| 灵武市| 灌云县| 桂阳县| 武邑县| 五莲县| 盐源县| 吐鲁番市| 巴里| 沈丘县| 祁东县| 揭西县| 锡林郭勒盟| 勐海县| 金沙县| 祁东县| 太湖县| 黄大仙区| 安多县| 沂源县| 海城市| 兴文县| 梅河口市| 铜陵市|