測(cè)試基本信息
主題:比較異步框架和同步框架在文件IO操作的性能差異
python版本:python 3.8
壓測(cè)工具:locust
web框架:同步:flask 異步:aiohttp、starlette
異步文件模塊:aiofiles、anyio.Path
請(qǐng)求并發(fā)量: 模擬10個(gè)用戶
服務(wù)器配置: Intel(R) i7-12700F
客戶端配置:Intel(R) i7-8700 3.20GHz
flask 同步框架
flask是python中輕量級(jí)web框架,特點(diǎn)是靈活、輕量級(jí)、擴(kuò)展性高。同時(shí)flask是一個(gè)同步框架,文件操作內(nèi)容是在請(qǐng)求中打開一個(gè)文件demo.txt,讀取文件內(nèi)容,然后返回文件內(nèi)容。
from flask import Flask, request
app = Flask(__name__)
@app.route('/file')
def file():
with open("demo.txt") as f:
text = f.read()
return text
if __name__ == '__main__':
app.run(port=8090, host="0.0.0.0")
壓測(cè)結(jié)果
并發(fā)量:453
aiohttp 異步框架
aiohttp 是一個(gè)基于 asyncio 的異步 HTTP 網(wǎng)絡(luò)模塊,它既提供了服務(wù)端,又提供了客戶端。由于python內(nèi)置函數(shù)open不支持異步讀寫,所以選用異步文件讀寫速度最快的 aiofiles 模塊,打開同一個(gè)demo.txt文件。
from aiohttp import web
import aiofiles
routes = web.RouteTableDef()
@routes.get("/file")
async def file(request):
async with aiofiles.open("demo.txt") as fp:
text = await fp.read()
return web.Response(text=text)
if __name__ == '__main__':
app = web.Application()
app.add_routes(routes)
web.run_app(app)
壓測(cè)結(jié)果
并發(fā)量:1490
starlette 異步框架
starlette 是當(dāng)下火熱的異步框架fastapi依賴的唯二模塊之一,主要用于異步請(qǐng)求的處理。anyio是starlette依賴的包,一個(gè)封裝asyncio的高級(jí)異步庫(kù),自帶異步io操作。
from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route
from anyio import Path
async def file(request):
text = await Path('demo.txt').read_text()
return JSONResponse(text)
app = Starlette(debug=True, routes=[Route('/file', file),])
壓測(cè)結(jié)果
并發(fā)量:1538
對(duì)比
并發(fā)曲線圖對(duì)比:
參數(shù)對(duì)比:
框架 | 文件IO并發(fā)量 | 延遲 | 純框架無(wú)IO并發(fā)量 |
---|---|---|---|
flask | 453 | 21 ms | 463 |
aiohttp | 1490 | 6 ms | 1455 |
starlette | 1538 | 6 ms | 1539 |
總結(jié)
在文件讀寫方面,異步框架性能是同步框架的3倍左右。同一個(gè)框架相較于無(wú)IO并發(fā)時(shí)性能略有下降但并不是很多,這說(shuō)明文件IO阻塞并嚴(yán)重。下一篇比較數(shù)據(jù)庫(kù)IO的并發(fā)性能。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-464193.html
準(zhǔn)備連載一系列關(guān)于python異步編程的文章。包括同異步框架性能對(duì)比、異步事情驅(qū)動(dòng)原理等。首發(fā)微信公眾號(hào),歡迎關(guān)注第一時(shí)間閱讀。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-464193.html
到了這里,關(guān)于Python異步編程之web框架 異步vs同步 文件IO任務(wù)壓測(cè)對(duì)比的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!