成人免费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

2009-04-09 16:52:47

LinuxUbuntu 9.04

2023-05-23 10:01:51

冪等性抽象代數

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

2021-08-02 07:23:54

爬蟲requests網絡庫

2021-02-03 11:20:41

Docker架構容器

2018-01-05 15:36:12

工具博客寫作

2022-10-08 06:26:48

人工智能機器學習藝術

2019-10-28 11:30:43

架構數據結構布隆過濾器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品国产亚洲a | 欧美三区在线观看 | 三级成人片 | www.jizzjizz| 久久久久99| 欧美在线激情 | 亚洲一区 | h肉视频| 99久久中文字幕三级久久日本 | 亚洲在线 | 一区二区播放 | 天天操夜夜操 | 四虎影视免费观看 | 欧美成人精品一区 | 久青草影院 | 国产特级毛片aaaaaa喷潮 | 国产高潮好爽受不了了夜色 | 欧美日韩综合一区 | 国产精品美女久久久久久免费 | 国产午夜精品一区二区三区四区 | 91精品国产91久久久久久丝袜 | 精品一二区| 国产日韩欧美另类 | av在线电影网 | 美女天天操 | 国产成人在线一区 | 久久久久久免费看 | 欧美激情在线精品一区二区三区 | 国产欧美一区二区三区在线看 | 在线视频日韩精品 | 色婷婷国产精品 | 免费视频中文字幕 | 超级乱淫av片免费播放 | 精品久久久久久 | 国产99久久久国产精品 | 99久久99| 久久精品免费一区二区三 | 一区二区三区免费 | 亚洲交性| 精品久久99 | 欧美久久综合 |