色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

python 常用的異步框架匯總整理

瀏覽:32日期:2022-06-16 11:41:45
目錄正文開始1. Tornado2. Aiohttp3.Sanic4. FastAPI5. Ruia總結參考資料正文開始

asyncio 是 Python 3.4版本引入的標準庫,直接內置了對異步IO的支持。

asyncio 在單線程內部維護了 EventLoop 隊列,然后把需要執行異步IO的任務添加到 EventLoop 隊列中,至于任務的完成通過類似回調的邏輯是實現后續的任務。如果你有 JavaScript的基礎那么理解python的 asyncio 很簡單,關鍵字、語法以及實現的原理都極其類似。

import asyncioasync def main(): print(’Hello ...’) await asyncio.sleep(1) print(’... World!’)# Python 3.7+asyncio.run(main())1. Tornado

Tornado 是一個Python web框架和異步網絡庫,起初由 FriendFeed 開發. 通過使用非阻塞網絡I/O, Tornado可以支撐上萬級的連接,處理 長連接, WebSockets ,和其他需要與每個用戶保持長久連接的應用。

下面貼上官方 demo :

import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler): def get(self):self.write('Hello, world')def make_app(): return tornado.web.Application([(r'/', MainHandler), ])if __name__ == '__main__': app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start()2. Aiohttp

一個基于 asyncio 異步的web框架,支持 websocket,不需要寫回掉的代碼、有著豐富的生態、中間價等、開箱即用的服務端與客戶端。

下面貼上官方 demo :

# 客服端代碼import aiohttpimport asyncioasync def main(): async with aiohttp.ClientSession() as session:async with session.get(’http://python.org’) as response: print('Status:', response.status) print('Content-type:', response.headers[’content-type’]) html = await response.text() print('Body:', html[:15], '...')loop = asyncio.get_event_loop()loop.run_until_complete(main())

# 服務端代碼from aiohttp import webasync def handle(request): name = request.match_info.get(’name’, 'Anonymous') text = 'Hello, ' + name return web.Response(text=text)async def wshandle(request): ws = web.WebSocketResponse() await ws.prepare(request) async for msg in ws:if msg.type == web.WSMsgType.text: await ws.send_str('Hello, {}'.format(msg.data))elif msg.type == web.WSMsgType.binary: await ws.send_bytes(msg.data)elif msg.type == web.WSMsgType.close: break return wsapp = web.Application()app.add_routes([web.get(’/’, handle),web.get(’/echo’, wshandle),web.get(’/{name}’, handle)])if __name__ == ’__main__’: web.run_app(app)

aiohttp的生態:

aiohttp-session 為 aiohttp 服務提供 sessions支持,同時支持數據持久化數據庫。 aiohttp-debugtoolbar 為 aiohttp 提供調試的工具(記錄 asyncio 異常的堆棧信息)。 aiohttp-security 為aiohttp提供認證以及權限相關的插件。 aiohttp-devtools aiohttp開發工具,提供開發環境的部署、靜態資源的代理。 aiohttp-cors CORS 跨域認證支持。 aiohttp-sse 服務端事件的支持(一種服務端推送消息的服務)。 pytest-aiohttp pytest 測試框架的支持。 aiohttp-mako Mako 服務端模板渲染的支持。 aiohttp-jinja2 Jinja2 服務端模板渲染的支持(大名鼎鼎的flask的渲染引擎)。 aiozipkin 分布式系統中對服務追蹤,為微服務中延時問題提供數據支持。

aiohttp數據庫支持:

aiopg PostgreSQL異步支持。aiomysql MySql 異步支持。aioredis Redis 異步支持。asyncpg 另外一個對 PostgreSQL 異步支持,比 aiopg 效率高,但是 api 不通用。

3.Sanic

Sanic 是一個 Python 3.7+ 的基于 asyncio 的 web 服務器和web框架,目標是提供一種簡單的方法來啟動和運行一個易于構建、擴展和終極性能HTTP服務器,是一個比較類似 falsk 的異步web框架。

To provide a simple way to get up and running a highly performant HTTP server that is easy to build, to expand, and ultimately to scale.

官方demo:

from sanic import Sanicfrom sanic.response import jsonapp = Sanic('My Hello, world app')@app.route(’/’)async def test(request): return json({’hello’: ’world’})if __name__ == ’__main__’: app.run()4. FastAPI

FastAPI 是一個用于構建API的高性能web框架,基于Python3.6+并支持標準的 Python 類型提示。同時是最快的 Python web框架之一,可與 NodeJS 和 Go 比肩(主要歸功于 Starlette 和 Pydantic)。

from typing import Optionalfrom fastapi import FastAPIapp = FastAPI()@app.get('/')def read_root(): return {'Hello': 'World'}@app.get('/items/{item_id}')def read_item(item_id: int, q: Optional[str] = None): return {'item_id': item_id, 'q': q}# 啟動 uvicorn main:app --reload# pip install uvicorn[standard]5. Ruia

一個基于asyncio和aiohttp的異步爬蟲框架,目標在于讓開發者編寫爬蟲盡可能地方便快速。國人開發中文文檔的支持,方便快速的構建爬蟲項目,自定義HTML解析工具,快速獲取頁面數據。

官方demo:

import asynciofrom ruia import Item, TextField, AttrFieldclass HackerNewsItem(Item): target_item = TextField(css_select=’tr.athing’) title = TextField(css_select=’a.storylink’) url = AttrField(css_select=’a.storylink’, attr=’href’)async def test_item(): url = ’https://news.ycombinator.com/news?p=1’ async for item in HackerNewsItem.get_items(url=url):print(’{}: {}’.format(item.title, item.url))if __name__ == ’__main__’: # Python 3.7 Required. asyncio.run(test_item()) # For Python 3.6 # loop = asyncio.get_event_loop() # loop.run_until_complete(test_item())總結

隨著 python 社區對異步支持的愈發友好,異步框架的生態也愈發完善。Tornado 是我第一個接觸到的一步框架,現如今伴隨著最快 python web 框架之爭,Tornado也漸漸跌落神壇。但是至于誰是最快的并不重要,重要的是生態,避免重復造輪子才是重要的。

PS:

我記得之前了解 Sanic 的時候它還是基于 aiohttp 開發的 web 框架,現如今已經重構了大部分代碼,核心組件也都自己實現。 tornado 雖然語法過時了,但是應該是最成熟、最早以及文檔最多的一個異步框架。 之前用tornado的時候還需要造關于異步操作的輪子,現如今生態日趨完善。

最后如果你想使用異步的框架,那么記得所有的IO操作均需要異步操作實現,否則會大大影響性能。 (比如第三方的短信服務不能直接使用同步代碼的sdk )

參考資料

Aiohttp docs

Sanic 中文

Uvloop

Tornado 中文

以上就是python 常用的異步框架匯總整理的詳細內容,更多關于python異步框架匯總的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲在线日韩 | 91香蕉国产在线观看免费永久 | 亚洲国产视频在线 | 美毛片 | 国产精品二区页在线播放 | 久久精品久久精品久久 | 亚洲最新在线 | 男女很舒服爽视频免费 | 欧美日韩偷拍自拍 | 美女免费在线视频 | 成 人色 网 站 欧美大片在线观看 | 男女性关系视频免费观看软件 | 久久久国产精品免费 | 91香蕉国产| 免费观看欧美一级高清 | 久草中文视频 | 亚洲网站一区 | 日韩高清不卡在线 | 正在播放国产乱子伦视频 | 精品综合在线 | 亚洲日本va午夜中文字幕一区 | 国产精品亚洲二区在线 | 制服丝袜在线视频香蕉 | 国产精品99久久久 | 玖草视频在线 | 男人天堂1024| 国产精品视频网址 | 男人的天堂在线观看免费 | 中文字幕最新中文字幕中文字幕 | 日本精品久久久久久久 | 精品国产一二三区在线影院 | 在线免费观看国产 | 狠狠狠狠狠 | 我要看欧美精品一级毛片 | 人人公开免费超级碰碰碰视频 | 亚洲精品久久一区影院 | 免费一级a毛片免费观看欧美大片 | 久久99精品国产免费观看 | 亚洲欧美日韩综合在线一区二区三区 | 97久久精品午夜一区二区 | 99热在线免费 |