異步Python Web框架比較
這里測試的python異步框架幾乎都與ASGI兼容(除了aiohttp)。
基準測試的目的不是測試部署(例如uvicorn與hypercorn等)或數(shù)據(jù)庫(ORM,驅(qū)動程序),而是測試框架本身。基準檢查檢查請求解析(正文,標頭,表單數(shù)據(jù),查詢),路由,響應(yīng)。
接受請求并返回帶有自定義動態(tài)標頭的HTML響應(yīng)解析上傳的文件,將其存儲在磁盤上并返回文本響應(yīng)解析路徑參數(shù),查詢字符串,JSON正文并返回JSON響應(yīng)的綜合統(tǒng)計。
測試硬件
該基準使用Github Action運行。根據(jù)github文檔 ,運行的硬件規(guī)格為:
- 2核vCPU(Intel®Xeon®Platinum 8272CL(Cascade Lake),Intel®Xeon®8171M 2.1GHz(Skylake))
- 7 GB的RAM內(nèi)存
- 14 GB的SSD磁盤空間
- 操作系統(tǒng)Ubuntu 20.04
使用gunicorn / uvicorn命令從docker運行ASGI應(yīng)用程序:
- gunicorn -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8080 app:app
應(yīng)用程序的源代碼可以在此處找到 。
https://github.com/klen/py-frameworks-bench/tree/develop/frameworks
通過WRK實用程序收到結(jié)果:
- wrk -d15s -t4 -c64 [URL]
基準測試包含三種測試:
- “簡單”測試:接受請求并返回帶有自定義動態(tài)標頭的HTML響應(yīng)。該測試僅模擬單個HTML響應(yīng)。
- “上傳”測試:接受上傳的文件并將其存儲在磁盤上。該測試模擬多部分表單數(shù)據(jù)處理并處理文件。
- “ API”測試:檢查標頭,解析路徑參數(shù),查詢字符串,JSON正文并返回JSON響應(yīng)。該測試模擬JSON REST API。
接受請求并返回帶有自定義動態(tài)標頭的HTML響應(yīng)
該測試僅模擬單個HTML響應(yīng)。按最大請求數(shù)/秒排序
解析上傳的文件,將其存儲在磁盤上并返回文本響應(yīng)
該測試模擬多部分表單數(shù)據(jù)處理并處理文件。按最大請求數(shù)/秒排序
解析路徑參數(shù),查詢字符串,JSON正文并返回JSON響應(yīng)
該測試模擬一個簡單的JSON REST API端點。按最大要求/秒排序
綜合統(tǒng)計
綜合基準測試結(jié)果
按已完成的請求排序