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

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

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

3天內不再提示

居然有比requests更強大Python庫出現

阿銘linux ? 來源:努力編程小伙 ? 作者:努力編程小伙 ? 2021-07-27 10:43 ? 次閱讀

最近公司 Python 后端項目進行重構,整個后端邏輯基本都變更為采用“異步”協程的方式實現。看著滿屏幕經過 async await(協程在 Python 中的實現)修飾的代碼,我頓時感到一臉懵逼,不知所措。

雖然之前有了解過“協程”是什么東西,但并沒有深入探索,于是正好借著這次機會可以好好學習一下。

什么是協程?

簡單來說,協程是一種基于線程之上,但又比線程更加輕量級的存在。對于系統內核來說,協程具有不可見的特性,所以這種由 程序員自己寫程序來管理 的輕量級線程又常被稱作 “用戶空間線程”。

協程比多線程好在哪呢?

1. 線程的控制權在操作系統手中,而 協程的控制權完全掌握在用戶自己手中,因此利用協程可以減少程序運行時的上下文切換,有效提高程序運行效率。

2. 建立線程時,系統默認分配給線程的 棧 大小是 1 M,而協程更輕量,接近 1 K 。因此可以在相同的內存中開啟更多的協程。

3. 由于協程的本質不是多線程而是單線程,所以不需要多線程的鎖機制。因為只有一個線程,也不存在同時寫變量而引起的沖突。在協程中控制共享資源不需要加鎖,只需要判斷狀態即可。所以協程的執行效率比多線程高很多,同時也有效避免了多線程中的競爭關系。

協程的適用 & 不適用場景

適用場景:協程適用于被阻塞的,且需要大量并發的場景。

不適用場景:協程不適用于存在大量計算的場景(因為協程的本質是單線程來回切換),如果遇到這種情況,還是應該使用其他手段去解決。

初探異步 http 框架 httpx

至此我們對 “協程” 應該有了個大概的了解,但故事說到這里,相信有朋友還是滿臉疑問:“協程” 對于接口測試有什么幫助呢?不要著急,答案就在下面。

相信用過 Python 做接口測試的朋友都對 requests 庫不陌生。requests 中實現的 http 請求是同步請求,但其實基于 http 請求 IO 阻塞的特性,非常適合用協程來實現 “異步” http 請求從而提升測試效率。

相信早就有人注意到了這點,于是在 Github 經過了一番探索后,果不其然,最終尋找到了支持協程 “異步” 調用 http 的開源庫: httpx

什么是 httpx

httpx 是一個幾乎繼承了所有 requests 的特性并且支持 “異步” http 請求的開源庫。簡單來說,可以認為 httpx 是強化版 requests。

下面大家可以跟著我一起見識一下 httpx 的強大

安裝

httpx 的安裝非常簡單,在 Python 3.6 以上的環境執行

pip install httpx

最佳實踐

俗話說得好,效率決定成敗。我分別使用了 httpx 異步 和 同步 的方式對批量 http 請求進行了耗時比較,來一起看看結果吧~

首先來看看同步 http 請求的耗時表現:

import asyncioimport httpximport threadingimport time

def sync_main(url, sign): response = httpx.get(url).status_code print(f‘sync_main: {threading.current_thread()}: {sign}: {response}’)

sync_start = time.time()[sync_main(url=‘http://www.baidu.com’, sign=i) for i in range(200)]sync_end = time.time()print(sync_end - sync_start)

代碼比較簡單,可以看到在 sync_main 中則實現了同步 http 訪問百度 200 次。

運行后輸出如下(截取了部分關鍵輸出。。。):

sync_main: 《_MainThread(MainThread, started 4471512512)》: 192: 200sync_main: 《_MainThread(MainThread, started 4471512512)》: 193: 200sync_main: 《_MainThread(MainThread, started 4471512512)》: 194: 200sync_main: 《_MainThread(MainThread, started 4471512512)》: 195: 200sync_main: 《_MainThread(MainThread, started 4471512512)》: 196: 200sync_main: 《_MainThread(MainThread, started 4471512512)》: 197: 200sync_main: 《_MainThread(MainThread, started 4471512512)》: 198: 200sync_main: 《_MainThread(MainThread, started 4471512512)》: 199: 20016.56578803062439

可以看到在上面的輸出中, 主線程沒有進行切換(因為本來就是單線程啊喂!)請求按照順序執行(因為是同步請求)。

程序運行共耗時 16.6 秒

下面我們試試 “異步” http 請求:

import asyncioimport httpximport threadingimport time

client = httpx.AsyncClient()

async def async_main(url, sign): response = await client.get(url) status_code = response.status_code print(f‘async_main: {threading.current_thread()}: {sign}:{status_code}’)

loop = asyncio.get_event_loop()tasks = [async_main(url=‘http://www.baidu.com’, sign=i) for i in range(200)]async_start = time.time()loop.run_until_complete(asyncio.wait(tasks))async_end = time.time()loop.close()print(async_end - async_start)

上述代碼在 async_main 中用 async await 關鍵字實現了“異步” http,通過 asyncio ( 異步 io 庫請求百度首頁 200 次并打印出了耗時。

運行代碼后可以看到如下輸出(截取了部分關鍵輸出。。。)

async_main: 《_MainThread(MainThread, started 4471512512)》: 56: 200async_main: 《_MainThread(MainThread, started 4471512512)》: 99: 200async_main: 《_MainThread(MainThread, started 4471512512)》: 67: 200async_main: 《_MainThread(MainThread, started 4471512512)》: 93: 200async_main: 《_MainThread(MainThread, started 4471512512)》: 125: 200async_main: 《_MainThread(MainThread, started 4471512512)》: 193: 200async_main: 《_MainThread(MainThread, started 4471512512)》: 100: 2004.518340110778809

可以看到順序雖然是亂的(56,99,67.。。) (這是因為程序在協程間不停切換) 但是主線程并沒有切換 (協程本質還是單線程 )。

程序共耗時 4.5 秒

比起同步請求耗時的 16.6 秒 縮短了接近 73 %!

俗話說得好,一步快,步步快。 在耗時方面,“異步” http 確實比同步 http 快了很多。當然,“協程” 不僅僅能在請求效率方面賦能接口測試, 掌握 “協程”后,相信小伙伴們的技術水平也能提升一個臺階,從而設計出更優秀的測試框架。

編輯:jq

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

    關注

    56

    文章

    4797

    瀏覽量

    84776

原文標題:比 requests 更強大 Python 庫,讓你的爬蟲效率提高一倍

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    NVIDIA發布cuPyNumeric加速計算

    該加速計算幫助科研人員無縫地擴展到強大的計算集群,并且無需修改 Python 代碼,推進科學發現。
    的頭像 發表于 11-21 10:05 ?272次閱讀

    Python解析:通過實現代理請求與數據抓取

    Python中,有多個可以幫助你實現代理請求和數據抓取。這些提供了豐富的功能和靈活的API,使得你可以輕松地發送HTTP請求、處理響應、解析HTML/XML/JSON數據,以及進行復雜的網絡操作。
    的頭像 發表于 10-24 07:54 ?183次閱讀

    用運放搭建的反相放大電路輸入為0V,輸出居然達到了2.2V,原因你能想到嗎?

    反相放大電路相信大家都很熟悉了,當反相輸入端電壓為0V時,我們期望的輸出電壓也應該是0V,但是下面這個電路反相輸入端電壓為0V時輸出電壓居然有2.2V之高,原因何在呢?
    的頭像 發表于 10-21 11:16 ?1707次閱讀
    用運放搭建的反相放大電路輸入為0V,輸出<b class='flag-5'>居然</b>達到了2.2V,原因你能想到嗎?

    數據數據恢復—SQL Server數據出現823錯誤的數據恢復案例

    SQL Server數據故障: SQL Server附加數據出現錯誤823,附加數據失敗。數據沒有備份,無法通過備份恢復數據
    的頭像 發表于 09-20 11:46 ?364次閱讀
    數據<b class='flag-5'>庫</b>數據恢復—SQL Server數據<b class='flag-5'>庫</b><b class='flag-5'>出現</b>823錯誤的數據恢復案例

    如何利用python和API查詢IP地址?

    Python中,直接查詢IP地址的地理位置或詳細信息(如所屬國家、城市等)通常需要依賴外部API服務,因為Python標準本身不提供直接查詢IP地址地理位置的功能。以下是一個使用reque
    發表于 08-28 11:55

    pytorch和python的關系是什么

    在當今的人工智能領域,Python已經成為了最受歡迎的編程語言之一。Python的易學易用、豐富的和框架以及強大的社區支持,使其成為了數據科學、機器學習和深度學習等領域的首選語言。而
    的頭像 發表于 08-01 15:27 ?2019次閱讀

    Python建模算法與應用

    Python作為一種功能強大、免費、開源且面向對象的編程語言,在科學計算、數學建模、數據分析等領域展現出了卓越的性能。其簡潔的語法、對動態輸入的支持以及解釋性語言的本質,使得Python在多個平臺
    的頭像 發表于 07-24 10:41 ?569次閱讀

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件,它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發表于 07-16 10:38 ?1238次閱讀

    Python中的人工智能框架與實例

    在人工智能(AI)領域,Python因其簡潔的語法、豐富的強大的社區支持,成為了最受歡迎的編程語言之一。本文將詳細介紹Python中的人工智能框架,并通過具體實例展示如何使用這些框
    的頭像 發表于 07-15 14:54 ?1748次閱讀

    深度學習常用的Python

    深度學習作為人工智能的一個重要分支,通過模擬人類大腦中的神經網絡來解決復雜問題。Python作為一種流行的編程語言,憑借其簡潔的語法和豐富的支持,成為了深度學習研究和應用的首選工具。本文將深入探討
    的頭像 發表于 07-03 16:04 ?663次閱讀

    如何使用Python進行神經網絡編程

    。 為什么使用PythonPython是一種廣泛使用的高級編程語言,以其易讀性和易用性而聞名。Python擁有強大,如TensorF
    的頭像 發表于 07-02 09:58 ?416次閱讀

    ESP32下如何加自定義Python

    我看官方有提供Micropython的bin文件,但我想根據自己外設擴充一下Python,這個應該從哪里入手? 之前做過RTT系統的python擴充,RTT有提供Micropyth
    發表于 06-18 06:27

    工業物聯網與SCADA哪個更強大

    提高生產效率、降低運營成本,并通過實時監控和控制來優化工業流程。然而,關于哪個系統更強大,我們需要從多個維度進行深入分析。
    的頭像 發表于 06-07 15:17 ?1115次閱讀

    Python自動化測試框架及其應用

    Pytest是一個非常成熟的全功能的Python測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,功能更強大
    的頭像 發表于 04-03 16:15 ?561次閱讀
    <b class='flag-5'>Python</b>自動化測試框架及其應用

    震驚!居然有人給 Raspberry Pi 5 做 X 射線!

    ?Raspberry Pi 5?最新、最強大的計算機內部的秘密。 震驚!居然有人給 Raspberry Pi 5 做 X 射線! Jeff?的視頻深入地介紹了 Pi 5 的內部構造,從 RAM 和 PCIe 接口
    的頭像 發表于 01-10 16:42 ?494次閱讀
    震驚!<b class='flag-5'>居然有</b>人給 Raspberry Pi 5 做 X 射線!
    主站蜘蛛池模板: 亚洲欧美韩国综合色| 亚洲蜜桃AV永久无码精品放毛片 | 亚洲永久精品AV在线观看| 好好的曰com久久| 人妻体体内射精一区二区| 成年女人免费播放影院| 久久亚洲精品无码A片大香大香| 色综合99久久久国产AV| 国产欧美精品一区二区三区-老狼| 亚洲女人毛片| 蜜桃传媒在线播放| 一线高清视频在线播放| 国产精品自在拍在线播放| 亚洲青青草| 漂亮的保姆3中文版完整版 | 鲁大师影院在线视频在线观看| 小草高清视频免费直播| 草莓国产视频免费观看| 无码成A毛片免费| 久久免费国产视频| 丰满五十六十老熟女HD60| 一本之道高清在线观看免费| 国色精品VA在线观看免费视频| 在线亚洲专区中文字幕| 精品国产品国语在线不卡丶| 亚洲国产中文字幕在线视频| 蜜芽亚洲欧美一区二区电影| 国产盗摄一区二区| 99久久久久精品国产免费麻豆| 久久亚洲精品成人综合| 成人网站国产在线视频内射视频| 亚洲精品无码久久久久A片空| 欧美疯狂做受xxxxx喷水| 国产在线综合色视频| japanese from色系| 青青娱乐网| 俄罗斯雏妓的BBB孩交| 永久久久免费人妻精品| 老熟女毛茸茸浓毛| 国产婷婷色一区二区三区在线| 亚洲黄色成人|