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

uvloop —— 超級快的 Python 異步網絡框架

大數據
asyncio是遵循Python標準庫的一個異步 I/O框架.在這篇文章里,我將介紹 uvloop: 可以完整替代asyncio事件循環.uvloop是用Cython寫的,基于 libuv.uvloop 使得 asyncio 更快. 實際上,比nodejs,gevent,以及其他任何Python異步框架至少快兩倍 .uvloop asyncio 基于性能的測試接近于Go程序.

[[194475]]

簡短介紹

asyncio是遵循Python標準庫的一個異步 I/O框架.在這篇文章里,我將介紹 uvloop: 可以完整替代asyncio事件循環.uvloop是用Cython寫的,基于 libuv.

uvloop 使得 asyncio 更快. 實際上,比nodejs,gevent,以及其他任何Python異步框架至少快兩倍 .uvloop asyncio 基于性能的測試接近于Go程序.

asyncio 和 uvloop

asyncio 模塊, 是在 PEP 3156引入的, 是一個集合,包含網絡傳輸, 協議, 和抽象的流, 帶有可插拔的事件循環. 事件循環是asyncio的核心.它提供如下API:

  • 調用方法的調度
  • 通過網絡傳輸數據
  • 執行 DNS 查詢,
  • 處理 OS 操作系統信號
  • 對創建服務器和連接進行封裝
  • 子進程異步處理

目前 uvloop 只支持 *nix 平臺和 Python 3.5。

uvloop 是 Python 內建的 asyncio 事件循環的替代品,你可以通過 pip 來安裝:

  1. $ pip install uvloop 

在你的 asyncio 代碼中使用 uvloop 非常簡單:

  1. import asyncio 
  2. import uvloop 
  3. asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) 

上面的代碼片段讓 asyncio.get_event_loop() 返回一個 uvloop 的實例。

你還可以顯式的創建一個uvloop實例,通過調用uvloop.new_event_loop()。

體系結構

uvloop是用Cython編寫的,并建立在libuv之上。

libuv是一種高性能的、跨平臺異步的 I/O 類庫,nodejs也使用到了它。由于nodejs是如此的廣泛和流行,可以知道libuv是快速且穩定的。

uvloop 實現了所有的asyncio 事件循環APIs。高級別的Python對象包裝了低級別的libuv 結構體和函數方法。 繼承可以使得代碼保持DRY(不要重復自己),并確保任何手動的內存管理都可以與libuv的原生類型的生命周期保持同步。

基準測試

與其它實現相比,為了檢測uvloop棧性能,我們創建了toolbench基準測試,用于標準的TCP和UNIX套接字I/O,和HTTP協議性能的基準 。

基準測試服務器運行在一個包含外部負載生成工具 (wrk HTTP 基準測試)的Docker容器內,它測試請求吞吐量與延遲。

這篇博客中所有的基準測試都運行于Intel Xeon CPU E5-1620 v2 @ 3.70GHz的 Ubuntu Linux系統.我們使用的是Python 3.5,所有服務器都是單核. 此外,Go代碼中使用了GOMAXPROCS=1 ,nodejs沒有使用集群,并且所有的Python服務器都是單線程.每一個基準測試集都設置了TCP_NODELAY標識。

在Mac OS X上的基準報告結果也很相似。

TCP

這個基準測試使用不同的消息數目對一個簡單的回顯服務器的性能進行了測試。我們分別使用了1, 10, 和100 KiB 的包。并發級別是10。每一個基準運行了30秒。

可以點擊這里查看完整的TCP基準報告。

 

每個位置的一些意見:

  1. asyncio-streams。 asyncio 和其內置的純Python實現的事件循環。在這個基準測試中,我們測試了高級別的流的抽象的性能。我們使用asyncio.create_server()來創建一個服務器,把一對(reader, writer) 傳遞給客戶端協同程序.
  2. tornado。 這個服務器實現了一個非常簡單的Tornado 協議,它能夠把收到的消息立即回復回去。
  3. curio-streams。 Curio是Python aio 庫上的新成員。 與asyncio-streams類似,在這個基準測試中,我們測試了curio 流,使用curio.make_streams()來創建了一對(reader, writer),它提供了一些高級的API,如readline()。
  4. twisted。 跟Tornado類似,我們測試了一個最小的回聲協議。
  5. curio。這個基準測試測試了curio 套接字的性能:這是一個實現了sock.recv() 和 sock.sendall()緊密循環的協同程序。
  6. uvloop-streams。就如在#2中提到的,這里我們測試了asyncio高級流的性能,只不過這此時基于uvloop。
  7. gevent。在一個緊密循環里通過使用gevent.StreamServer和一個gevent套接字發送接受數據。
  8. asyncio。看起來普通的asyncio非常的快速!跟第2和4點類似,我們測試了一個最小的回聲協議,它是使用純Python的asyncio所實現的。
  9. nodejs。我們使用net.createServer API 在nodejs v4.2.6里測試流的性能。
  10. uvloop。這個基準測試測試了一個最小的回聲協議(就如 #2, #4, #8),它是使用基于uvloop的asyncio實現的。 使用1 KiB消息的情況下,uvloop是最快的實現,可以高達每秒鐘105,000的請求!使用100 KiB消息的情況下, uvloop的速度可以達到大概2.3 GiB/s。
  11. Go。一個 net.Conn.Read/Write 調用的緊密循環。 Golang 性能跟uvloop非常接近,在10 和100 KiB消息情況下會稍微好一些。

所有的基準測試的代碼可以在這里找到。

也可以查看所有的UNIX套接字基準測試結果。

HTTP

最初,我們想要在asyncio和uvloop上針對nodejs和Go進行測試。aiohttp是使用asyncio編寫異步HTTP服務器和客戶端 ***的框架。

也可以查看完整的HTTP基準測試報告。

然而,aiohttp 上的性能瓶頸確實其HTTP解析器,它比較慢,因此即使使用的I/O類庫再快也沒什么卵用。為了讓事情更有趣,我們為 http-parser (nodejs的 HTTP 解析器C類庫,最初是為Nginx研發的) 創建了一個Python綁定(binding)。這個類庫被命名為httptools,并且在Github和PyPI都可以找到。

對于HTTP,所有的基準使用wrk 來生成負載。 并發級別設置為300。每個基準的持續時間為30秒。

 

令人驚奇的是,純Python實現的asyncio在高性能的HTTP解析器的幫助下,比使用同樣HTTP解析器的nodejs表現的快很多!

Go在1 KiB響應情況下要更快些,但是uvloop和asyncio的組合卻在10/100 KiB響應情況下要快很多。使用httptools的asyncio和uvloop的服務質量非常棒,對于Go來說也一樣。

不可否認,基于httptools的服務器非常的小巧,而且不像其他實現那樣不包含任何路由邏輯。盡管如此,這個基準卻演示了uvloop和一個高效實現的協議配合能變得多么快速。

Conclusion

我們可以得出結論, 利用uvloop可以寫出在單CPU內核下每秒鐘能夠發出上萬個請求的Python網絡代碼。 在多內核系統下,可以使用進程池來進一步來改善系統性能。

uvloop 和 asyncio,在加上Python 3.5里 async/await的強大能力,使得使用Python編寫高性能的網絡代碼更容易了。

責任編輯:武曉燕 來源: 36大數據
相關推薦

2021-04-02 11:05:57

Python同步異步

2021-03-11 11:32:40

Python同步異步

2021-05-08 13:58:10

Python 開發編程語言

2018-01-30 18:15:12

Python網絡爬蟲gevent

2020-07-03 07:54:02

2016-11-02 00:38:27

超級寬帶網絡技術

2022-06-22 08:16:29

異步非阻塞框架

2009-07-01 14:37:14

JavaScript異

2009-07-01 14:23:46

JavaScript異

2023-03-01 10:19:23

2024-03-01 16:20:33

2025-04-16 11:20:59

2012-10-24 10:21:41

超級計算機高性能計算服務器

2022-04-26 15:24:03

開源框架

2025-03-25 08:48:35

PiniaAPI管理

2009-07-01 13:58:00

JavaScript異

2024-03-14 11:06:37

JavaScript引擎探索

2020-01-07 10:14:38

Python程序員腳本語言

2009-07-01 14:31:01

JavaScript異

2009-02-20 08:51:22

.NET框架CLR組件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久综合 | 国产精品久久久99 | 国产精品久久久久久238 | 久久久噜噜噜www成人网 | 欧美在线a | 日本黄色大片免费看 | 国产一区二区视频免费在线观看 | 天天躁日日躁aaaa视频 | 伊人一二三 | 国产精品免费高清 | 久久久精彩视频 | 亚洲精品在线免费 | 91av视频在线观看 | 国产av毛片 | 国产一区二区三区四区五区加勒比 | 国产精品国产a级 | 欧美一区二区三区视频在线 | 人人干人人玩 | 日韩视频在线一区 | 国产精品欧美精品日韩精品 | 国产精品久久精品 | 精品久久久久久一区二区 | 一区二区三区四区不卡 | 国产最好的av国产大片 | 日日操夜夜操天天操 | 国产日韩一区二区 | 日日夜精品视频 | av中文字幕在线观看 | 久久91精品久久久久久9鸭 | 午夜影院网站 | 亚洲天堂一区二区 | 国产高清视频在线观看 | 99re在线视频| 拍真实国产伦偷精品 | 激情福利视频 | 日本一区二区高清视频 | 欧美4p | 毛片在线免费 | 欧美专区日韩专区 | 国产精品国产三级国产aⅴ原创 | 一区网站 |