成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在Python中實現異步編程,只需要這幾步就夠了

新聞 前端
異步編程是并行編程的一種方式。單個工作單元獨立于主應用程序線程運行,并通知調用線程其完成、失敗情況或進度。

   [[348195]]

圖源:unsplash

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

在Python中實現異步編程,只需要這幾步就夠了

同步vs異步

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

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

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

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

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

  1. deffun(length,a): 
  2.                   b = a 
  3.                   for i inrange(length): 
  4.                       a+=1 
  5.                   print("value of a before: "+str(b)+" now it's "+str(a)) 
  6.                   return a 
  7.                   
  8.               defmain(): 
  9.                   r1 =fun(50000000,0
  10.                   r2 =fun(100,12
  11.                   r3 =fun(100,41
  12.               if __name__=="__main__"
  13.                   main() 

以上代碼的輸出:

在Python中實現異步編程,只需要這幾步就夠了

這段代碼傳遞了for循環的范圍。執行代碼耗時長達13.843秒,因為r1的范圍是5000,所以耗時久。現在的問題是,必須先待r1任務完成,否則無法得到r2和r3。可能在得到r1之前就得到r2和r3嗎?答案是肯定的,這正是異步編程的用武之地。

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

  1. pip install asyncio 

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

  1. import asyncio 
  2.            asyncdeffun(length,a): 
  3.            b = a 
  4.            for i inrange(length): 
  5.                a+=1 
  6.                if i %10000==0
  7.                    await asyncio.sleep(0.0001
  8.                print("value of a before: "+str(b)+" now it's "+str(a)) 
  9.            return a 
  10.            asyncdefmain(): 
  11.            #creating subroutines. 
  12.            t1 = loop.create_task(fun(50000000,0)) 
  13.            t2 = loop.create_task(fun(100,12)) 
  14.            t3 = loop.create_task(fun(100,41)) 
  15.                await asyncio.wait([t1,t2,t3]) 
  16.            if __name__=="__main__"
  17.            loop = asyncio.get_event_loop() 
  18.            loop.run_until_complete(main()) 
  19.            loop.close() 

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

在Python中實現異步編程,只需要這幾步就夠了

輸出-1

在Python中實現異步編程,只需要這幾步就夠了

輸出-2

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

讓我們討論一下此代碼。

首先,在if __name__=="__main__"中定義了asyncio.get_event_loop(),并將這個循環作為處理循環事件的異步對象。然后創建一個main的例行程序,并設置條件:若main沒完成則繼續循環。每次異步,都要進行loop.close()的編程,否則結果就會錯誤或異常。

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

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

在Python中實現異步編程,你學會了嗎?

 

責任編輯:張燕妮 來源: 今日頭條
相關推薦

2023-09-05 07:55:56

Python網絡爬蟲

2022-08-24 16:26:51

Linuxcheat 命令

2023-10-04 17:31:21

項目部署軟件包

2024-06-04 14:20:47

數字化轉型數字化

2018-03-07 10:03:40

2023-05-23 10:01:51

冪等性抽象代數

2009-04-09 16:52:47

LinuxUbuntu 9.04

2018-08-03 12:21:02

2021-04-16 09:17:39

機器學習人工智能AI

2021-07-13 08:14:27

色彩用色類型輔助色

2021-05-07 07:52:51

Java并發編程

2016-12-13 17:02:49

androidjava移動應用開發

2018-01-09 15:44:57

2010-03-16 16:47:25

Ubuntu 9.04

2019-10-28 11:30:43

架構數據結構布隆過濾器

2023-10-11 12:45:49

Windows系統

2022-07-06 12:07:06

Python函數式編程

2021-08-02 07:23:54

爬蟲requests網絡庫

2018-01-05 15:36:12

工具博客寫作
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲图片视频一区 | 精品av | 天天曰天天曰 | 日韩在线观看一区 | 久久久成人免费一区二区 | 成人性视频免费网站 | 欧美黄色一级毛片 | 精品成人在线 | 日韩一二三区视频 | 91亚洲精品久久久电影 | 国产一区在线看 | 亚洲国产成人av好男人在线观看 | 成人欧美一区二区三区色青冈 | 精品毛片| 日本高清视频在线播放 | 美国一级黄色片 | 在线观看中文字幕一区二区 | 岛国午夜| 国产一区二区三区日韩 | 欧美黄a | 九九九色 | 国产精品自产拍 | 91国在线视频 | 亚洲首页| 欧美中国少妇xxx性高请视频 | 一区二区在线不卡 | 色久在线 | 国产高清精品在线 | 少妇一区在线观看 | 亚洲欧美一区二区三区国产精品 | 亚洲乱码国产乱码精品精的特点 | 一区二区三区视频在线免费观看 | 日韩成人在线播放 | 国产真实乱全部视频 | 麻豆精品国产免费 | 人人干免费 | 午夜影院网站 | 亚洲 中文 欧美 日韩 在线观看 | 一区二区三区四区在线 | 国产在线aa| 一级a爱片久久毛片 |