色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是事件循環

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-01 10:00 ? 次閱讀

Python的Asyncio模塊提供了管理事件、協程、任務和線程的方法,以及編寫并發代碼的原語。此模塊的主要組件和概念包括:

  • 事件循環 : 在Asyncio模塊中,每一個進程都有一個事件循環。
  • 協程 : 這是子程序的泛化概念。協程可以在執行期間暫停,這樣就可以等待外部的處理(例如IO)完成之后,從之前暫停的地方恢復執行。
  • Futures : 定義了 Future 對象,和 concurrent.futures 模塊一樣,表示尚未完成的計算。
  • Tasks : 這是Asyncio的子類,用于封裝和管理并行模式下的協程。

本節中重點討論事件,事實上,異步編程的上下文中,事件無比重要。因為事件的本質就是異步。

1. 什么是事件循環

在計算系統中,可以產生事件的實體叫做事件源,能處理事件的實體叫做事件處理者。

此外,還有一些第三方實體叫做事件循環。它的作用是管理所有的事件,在整個程序運行過程中不斷循環執行,追蹤事件發生的順序將它們放到隊列中,當主線程空閑的時候,調用相應的事件處理者處理事件。

最后,我們可以通過下面的偽代碼來理解事件循環:

while(1) {
  events = getEvents();
  for (e in events)
    processEvent(e);
}

所有的事件都在 ** while **循環中捕捉,然后經過事件處理者處理。事件處理的部分是系統唯一活躍的部分,當一個事件處理完成,流程繼續處理下一個事件。

2. 準備工作

Asyncio提供了以下方法來管理事件循環:

  1. ** loop = get_event_loop() ** : 得到當前上下文的事件循環。
  2. ** loop.call_later(time_delay, callback, arg) ** : 延后 time_delay 秒再執行 callback 方法。
  3. ** loop.call_soon(callback, argument) ** : 盡可能快調用 callback, call_soon() 函數結束,主線程回到事件循環之后就會馬上調用 callback 。
  4. ** loop.time() ** : 以float類型返回當前事件循環的內部時間。
  5. ** asyncio.set_event_loop() ** : 為當前上下文設置事件循環。
  6. ** asyncio.new_event_loop() ** : 根據此策略創建一個新的事件循環并返回。
  7. ** loop.run_forever() **: 在調用 stop() 之前將一直運行。

3. 如何做…

下面的代碼中,我們將展示如何使用Asyncio庫提供的事件循環創建異步模式的應用。

import asyncio
import datetime
import time

def function_1(end_time, loop):
    print("function_1 called")
    if (loop.time() + 1.0) < end_time:
        loop.call_later(1, function_2, end_time, loop)
    else:
        loop.stop()

def function_2(end_time, loop):
    print("function_2 called ")
    if (loop.time() + 1.0) < end_time:
        loop.call_later(1, function_3, end_time, loop)
    else:
        loop.stop()

def function_3(end_time, loop):
    print("function_3 called")
    if (loop.time() + 1.0) < end_time:
        loop.call_later(1, function_1, end_time, loop)
    else:
        loop.stop()

def function_4(end_time, loop):
    print("function_5 called")
    if (loop.time() + 1.0) < end_time:
        loop.call_later(1, function_4, end_time, loop)
    else:
        loop.stop()

loop = asyncio.get_event_loop()

end_loop = loop.time() + 9.0
loop.call_soon(function_1, end_loop, loop)
# loop.call_soon(function_4, end_loop, loop)
loop.run_forever()
loop.close()

運行結果如下:

python3 event.py
function_1 called
function_2 called
function_3 called
function_1 called
function_2 called
function_3 called
function_1 called
function_2 called
function_3 called

在這個例子中,我們定義了三個異步的任務,相繼執行,入下圖所示的順序。

圖片

首先,我們要得到這個事件循環:

loop = asyncio.get_event_loop()

然后我們通過** call_soon **方法調用了 ** function_1() ** 函數。

end_loop = loop.time() + 9.0
loop.call_soon(function_1, end_loop, loop)

讓我們來看一下 ** function_1() ** 的定義:

def function_1(end_time, loop):
    print("function_1 called")
    if (loop.time() + 1.0) < end_time:
        loop.call_later(1, function_2, end_time, loop)
    else:
        loop.stop()

這個函數通過以下參數定義了應用的異步行為:

  1. **end_time ** : 定義了 function_1() 可以運行的最長時間,并通過 call_later 方法傳入到 function_2() 中作為參數
  2. **loop ** : 之前通過 get_event_loop() 方法得到的事件循環。

** function_1() ** 的任務非常簡單,只是打印出函數名字。當然,里面也可以寫非常復雜的操作。

print("function_1 called")

任務執行結束之后,它將會比較 ** loop.time() ** **+1s 和設定的運行時間,如果沒有超過,使用call_later **在1秒之后執行 ** function_2() **

if (loop.time() + 1.0) < end_time:
    loop.call_later(1, function_2, end_time, loop)
else:
    loop.stop()

其中**function_2() **和 ****function_3() **** 的作用類似。如果運行的時間超過了設定,事件循環終止。

loop.run_forever()
loop.close()
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2695

    瀏覽量

    47433
  • 程序
    +關注

    關注

    117

    文章

    3785

    瀏覽量

    81005
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68525
  • python
    +關注

    關注

    56

    文章

    4792

    瀏覽量

    84628
收藏 人收藏

    評論

    相關推薦

    066. while循環:5.1 循環章節課程介紹

    循環
    充八萬
    發布于 :2023年07月05日 15:47:47

    067. while循環:5.2 了解循環

    循環
    充八萬
    發布于 :2023年07月05日 15:48:56

    066. while循環:5.1 循環章節課程介紹

    循環
    充八萬
    發布于 :2023年07月07日 03:42:29

    074. while循環:5.9 循環的注意事項

    循環
    充八萬
    發布于 :2023年07月07日 06:56:17

    系統的消息循環

    系統的消息循環 一、 實驗目的學習使用系統的消息循環。掌握如何通過系統的消息循環來響應鍵盤的消息,同時學會使用圖形模式
    發表于 12-25 23:56 ?1103次閱讀
    系統的消息<b class='flag-5'>循環</b>

    循環碼,循環碼是什么意思

    循環碼,循環碼是什么意思 循環碼是
    發表于 03-18 14:00 ?9894次閱讀

    在LabVIEW中使用的2種循環結構While循環和For循環的詳細資料概述

    在程序設計中,如果需要重復執行一段代碼,就需要使用循環結構。接下來我們將介紹在 LabVIEW 中常常使用的 2 種循環結構 While 循環和 For 循環
    發表于 06-19 08:00 ?33次下載
    在LabVIEW中使用的2種<b class='flag-5'>循環</b>結構While<b class='flag-5'>循環</b>和For<b class='flag-5'>循環</b>的詳細資料概述

    Python的while循環是什么

    Python中有2種循環。一種循環次數明確,另一種循環次數不明確。`for循環`的循環重復次數是`明確的`,遍歷對象里有幾個元素,
    的頭像 發表于 02-23 11:15 ?1260次閱讀

    while循環

    while 循環定義:“當…時候,執行某段程序”。當給定的條件為真時,執行循環體;條件為假時,結束循環
    的頭像 發表于 02-23 14:02 ?3034次閱讀
    while<b class='flag-5'>循環</b>

    C語言循環的比較

    一個循環體內又包含另一個完整的循環結構,稱為循環的嵌套。內嵌的循環體中還可以嵌套循環,這就是多層循環
    的頭像 發表于 03-09 11:16 ?795次閱讀

    WHILE ...ENDWHILE:編程設定當型循環 .EXIT:離開循環,無條件退出循環.

    當型循環。一直重復指令塊直到滿足了特定條件的循環。如果不滿足條件,則用 ENDWHILE 后的下一個指令繼續程序。在每次循環執行之前檢查條件。如果從一開始就不滿足條件,則不執行指令塊。循環
    的頭像 發表于 05-12 15:57 ?2771次閱讀
    WHILE ...ENDWHILE:編程設定當型<b class='flag-5'>循環</b> .EXIT:離開<b class='flag-5'>循環</b>,無條件退出<b class='flag-5'>循環</b>.

    for in range循環怎么使用

    for-in range 循環是Python中的一種循環結構,用于重復執行一段代碼,而且循環次數是已知的。 在Python中,for-in range 循環有以下幾種用法: 通過指定
    的頭像 發表于 11-21 14:49 ?1.3w次閱讀

    python怎么設置循環次數

    在Python中,可以使用循環語句來重復執行一段代碼多次。要設置循環次數,可以使用循環的計數器來控制循環的執行次數。以下是幾種常用的設置循環
    的頭像 發表于 11-23 15:50 ?5276次閱讀

    循環指令loop規定循環次數

    循環指令是計算機編程中非常重要的概念,它允許程序重復執行一段代碼塊,使得程序可以更有效地處理大量數據和重復性任務。在本文中,我們將詳盡、詳實、細致地介紹循環指令的相關概念、語法和應用場
    的頭像 發表于 02-14 16:10 ?1643次閱讀

    什么是PLC循環移位指令 PLC循環移位的特點

    PLC循環移位指令包括循環左移指令和循環右移指令。在循環移位過程中,移出的位并不會丟失,而是會放回空出的位上,形成一個環形移位。
    的頭像 發表于 03-07 16:57 ?2117次閱讀
    什么是PLC<b class='flag-5'>循環</b>移位指令 PLC<b class='flag-5'>循環</b>移位的特點
    主站蜘蛛池模板: 69日本人xxxx16—18| 亚洲精品久久久久久蜜臀| 亚久久伊人精品青青草原2020| 亚洲伊人久久大香线蕉综合图片| 99re6久久在热线视频| 国产精品一区二区人妻无码| 伦理片92伦理午夜| 乌克兰内射私拍| 69久久国产精品热88人妻| 国产精品色吧国产精品| 毛片亚洲毛片亚洲毛片| 性欧美video另类hd高清| 2019夜夜| 国产在线播放精品视频| 欧美性色xo影院69| 一级毛片免费下载| 国产精品久久久久AV麻豆| 妺妺窝人体色WWW偷窥女厕| 亚洲AV日韩AV欧美在线观看网 | 亚洲伊人久久综合影院2021| 把她带到密室调教性奴| 久久精品亚洲AV高清网站性色| 色悠悠电影网| 99久久久久精品国产免费麻豆 | 快播金瓶梅| a久久99精品久久久久久蜜芽| 亚洲欧美成人无码久久久| MM131亚洲精品久久安然| 99精品国产免费观看视频| 色婷婷五月综合中文字幕| 久久久WWW免费人成精品| 东京热 百度影音| 在教室伦流澡到高潮H女攻视频| 日韩在线av免费视久久| 久久久久国产一级毛片高清片| 日本女人下面毛茸茸| 亚洲青青草原| 国产精品亚洲AV毛片一区二区三区 | 国产亚洲制服免视频| 日韩高清特级特黄毛片| 97夜夜澡人人爽人人模人人喊|