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

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

3天內(nèi)不再提示

在Python中實現(xiàn)異步編程(附源碼)

如意 ? 來源:讀芯術(shù)微信公眾號 ? 作者:讀芯術(shù)微信公眾號 ? 2020-10-27 14:36 ? 次閱讀

異步編程是并行編程的一種方式。單個工作單元獨立于主應(yīng)用程序線程運行,并通知調(diào)用線程其完成、失敗情況或進度。下面這張圖理解起來會更直觀一些:

在Python中實現(xiàn)異步編程(附源碼)

同步vs異步

同步編程很普遍。如圖,請求1被發(fā)出后等待響應(yīng)1;一旦得到響應(yīng)1就發(fā)出請求2,然后等待它的響應(yīng)。在上面的代碼中,向函數(shù)傳遞參數(shù)“a”后等待函數(shù)返回更改后的值,然后再次調(diào)用以更改數(shù)字,最后再次得到響應(yīng),這就是同步編程。

而對于異步編程來說,請求1被發(fā)出后,無需等響應(yīng)1便可直接發(fā)出請求2。兩個請求完成后得到兩個響應(yīng)。簡單地說就是請求1和請求2是并行處理的,不等前一個請求的響應(yīng)便提出新的請求。

簡言之,只要打開任務(wù)管理器(macOS中的活動監(jiān)視器)就能看到多個應(yīng)用程序同步運行;或者一個Python Shell在兩個不同的終端窗口中運行。專業(yè)術(shù)語叫做多進程(MultiProcessing),顧名思義,即不止一個進程在運行。

如何在Python中進行異步編程?

一個同步編程的示例代碼如下:

在Python中實現(xiàn)異步編程(附源碼)

以上代碼的輸出:

在Python中實現(xiàn)異步編程(附源碼)

這段代碼傳遞了for循環(huán)的范圍。執(zhí)行代碼耗時長達13.843秒,因為r1的范圍是5000,所以耗時久?,F(xiàn)在的問題是,必須先待r1任務(wù)完成,否則無法得到r2和r3??赡茉诘玫絩1之前就得到r2和r3嗎?答案是肯定的,這正是異步編程的用武之地。

首先用pip指令安裝異步包。

pip install asyncio

安裝后,看一下新代碼。使用異步包:

在Python中實現(xiàn)異步編程(附源碼)

首先觀察該代碼的輸出,接下來討論該代碼:

在Python中實現(xiàn)異步編程(附源碼)

輸出-1

在Python中實現(xiàn)異步編程(附源碼)

輸出-2

輸出-1中首先能得到t2和t3進程的結(jié)果,然后在輸出-2的截圖中得到了t1進程的結(jié)果,這是異步編程的功勞。t1進程耗時最長,所以它的結(jié)果最后產(chǎn)生,且t1、t2和t3進程均并行運行。異步編程的好處就在于不必等待任何進程的結(jié)果,便可獲得下一個進程的結(jié)果。

讓我們討論一下此代碼。

首先,在if __name__==“__main__”中定義了asyncio.get_event_loop(),并將這個循環(huán)作為處理循環(huán)事件的異步對象。然后創(chuàng)建一個main的例行程序,并設(shè)置條件:若main沒完成則繼續(xù)循環(huán)。每次異步,都要進行l(wèi)oop.close()的編程,否則結(jié)果就會錯誤或異常。

然后將函數(shù)定義為asyncdeffunc_name,這樣解釋器就知道函數(shù)用了異步的方法。在main()中定義了三個任務(wù)(也可稱為子例程),并使用了await函數(shù),以便它等待三個進程結(jié)束(即使它沒有多大意義,也必須使用它)。

最后用了fun()函數(shù)。i %10000的if條件讓最大范圍的進程徐徐運行,最后得到了答案。仔細研究fun()函數(shù)并自己嘗試的話,其中的邏輯會顯得非常合理和直接。

在Python中實現(xiàn)異步編程,你學會了嗎?
責編AJX

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3523

    瀏覽量

    93277
  • 異步
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    18017
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84084
收藏 人收藏

    評論

    相關(guān)推薦

    xilinx ISE 異步FIFO ip的使用、仿真及各信號的討論(圖文教程)

    全部verilog源碼)5.基于verilog的分頻器設(shè)計 (可實現(xiàn)任意整數(shù)分頻) (全部源碼)6. 《ZedBoard高手之路》入門篇視頻教程7. 《FPGA設(shè)計
    發(fā)表于 07-16 15:09

    Python編程語言可以應(yīng)用在哪些方面?

    領(lǐng)域,Python幾乎是霸主地位,將網(wǎng)絡(luò)一切數(shù)據(jù)作為資源,通過自動化程序進行有針對性的數(shù)據(jù)采集以及處理。從事該領(lǐng)域應(yīng)學習爬蟲策略、高性能異步IO、分布式爬蟲等,并針對Scrapy框架源碼進行深入剖析
    發(fā)表于 02-05 17:50

    python有哪些方向?

    框架源碼進行深入剖析,從而理解其原理并實現(xiàn)自定義爬蟲框架。4. 云計算開發(fā)Python是從事云計算工作需要掌握的一門編程語言,目前很火的云計算框架OpenStack就是由
    發(fā)表于 03-09 15:47

    5種Python實現(xiàn)方式詳解

    使用CPython吧。JythonJythonJVM上實現(xiàn)Python,由Java編寫。Jython將Python源碼編譯成JVM字節(jié)碼
    發(fā)表于 05-22 15:52

    為什么用python樹莓派上編程?詳解python的優(yōu)點

    代碼。樹莓派python編程詳解當你創(chuàng)建一個Python程序時,首先必須從編譯器的環(huán)境退出來,并且打開一個文本編輯器,如emacs或者樹莓派的Leafpad。
    發(fā)表于 05-21 08:47

    Python的線性編程:直接教程分享

      線性編程是最常見的優(yōu)化技術(shù)之一。它具有廣泛的應(yīng)用范圍,并且經(jīng)常用于運籌學,工業(yè)設(shè)計,計劃等,并且還在不斷增加。Python的線性編程并沒有像機器學習那樣被大肆宣傳,但是它是可以通
    發(fā)表于 09-11 17:55

    關(guān)于《Python編程入門系列教程》說明及教程匯總

    的初學者,也很容易上手。2、和其它編程語言相比,實現(xiàn)同一個功能,Python 語言的實現(xiàn)代碼往往是最短的。也正因為python的這兩大特點所
    發(fā)表于 06-23 10:10

    蟻群算法python編程實現(xiàn)

    本文主要介紹了Python編程實現(xiàn)蟻群算法詳解,涉及螞蟻算法的簡介,主要原理及公式,以及Python
    發(fā)表于 02-02 10:36 ?7390次閱讀
    蟻群算法<b class='flag-5'>python</b><b class='flag-5'>編程</b><b class='flag-5'>實現(xiàn)</b>

    Python的asyncio怎么樣使用

    Python異步編程功能(簡稱async)讓你可以編寫不必等待獨立任務(wù)完成就可以完成更多工作的程序。
    發(fā)表于 03-18 13:48 ?1216次閱讀

    Python編程入門講解PPT

      Python是一種簡單易學,功能強大的編程語言。它有高效率的高層數(shù)據(jù)結(jié)構(gòu),能夠簡單、有效地實現(xiàn)面向?qū)ο?b class='flag-5'>編程Python語法簡潔,支持動態(tài)
    發(fā)表于 07-08 10:43 ?35次下載
    <b class='flag-5'>Python</b><b class='flag-5'>編程</b>入門講解PPT

    蜂鳴器播放音樂設(shè)計與實現(xiàn)源碼

    蜂鳴器播放音樂設(shè)計與實現(xiàn)源碼
    發(fā)表于 04-24 11:00 ?87次下載
    蜂鳴器播放音樂設(shè)計與<b class='flag-5'>實現(xiàn)</b>(<b class='flag-5'>附</b><b class='flag-5'>源碼</b>)

    淺析同步與異步Python的區(qū)別與概述

    你是否聽到人們說過,異步Python代碼比普通(或同步)Python代碼更快?果真是那樣嗎?
    的頭像 發(fā)表于 04-25 13:53 ?2127次閱讀
    淺析同步與<b class='flag-5'>異步</b><b class='flag-5'>Python</b>的區(qū)別與概述

    基于51單片機的圖書管理系統(tǒng)實現(xiàn)與設(shè)計(源碼)

    基于51單片機的圖書管理系統(tǒng)實現(xiàn)與設(shè)計(源碼)
    發(fā)表于 04-26 10:52 ?18次下載

    抽樣Python是如何實現(xiàn)

    今天來和大家聊聊抽樣的幾種常用方法,以及Python是如何實現(xiàn)的。
    的頭像 發(fā)表于 08-05 10:59 ?1090次閱讀

    怎么Python實現(xiàn)截圖功能

    操作。 今天Python實用寶典就來講講怎么Python實現(xiàn)截圖功能,以下教程默認您已經(jīng)安裝好了Py
    的頭像 發(fā)表于 11-03 15:32 ?835次閱讀
    怎么<b class='flag-5'>在</b><b class='flag-5'>Python</b><b class='flag-5'>中</b><b class='flag-5'>實現(xiàn)</b>截圖功能