很棒的異步
精心策劃的精彩 Python 非同步框架、函式庫、軟體和資源清單。
Python 3.4 中引入標準庫的 Python asyncio 模組提供了使用協程編寫單線程並發程式碼、透過套接字和其他資源復用 I/O 存取、運行網路用戶端和伺服器以及其他相關原語的基礎設施。
Asyncio 並不是真正的全新技術,但幾年來它似乎非常流行 - 特別是在 Python 社區以及 2014 年 3 月發布的 Python 3.4 中。在這裡找到一些很棒的軟體包,如果您缺少一個,我們希望您根據您的建議建立問題或拉取請求。
內容
- 網路框架
- 訊息佇列
- 資料庫驅動程式
- 聯網
- GraphQL
- 測試
- 替代循環
- 雜項
- 著作
- 會談
- 非同步的替代方案
網路框架
用於建立 Web 應用程式的庫。
- FastAPI - 一個基於類型提示的高效能 Python 3.6+ API 框架。由 Starlette 和 Pydantic 提供支援。
- Django - 一個成熟的高階 Python Web 框架,擁有龐大的社群和生態系統。
- Starlette - 用於建立高效能服務的輕量級 ASGI 框架/工具包。
- aiohttp - 用於 asyncio 的 Http 用戶端/伺服器 (PEP-3156).
- sanic - Python 3.5+ Web 伺服器,設計快速運作。
- Quart - 一個 asyncio Web 微框架,具有與 Flask 相同的 API。
- autobahn - 支援 asyncio 和 Twisted 的 WebSocket 和 WAMP,適用於客戶端和伺服器。
- websockets - 用於在 Python 中建立 WebSocket 伺服器和用戶端的程式庫,重點是正確性和簡單性。
- Tornado - 高效能 Web 框架和非同步網路庫。
- uvicorn - 快如閃電的 ASGI 伺服器。
訊息佇列
使用訊息佇列實作應用程式的庫。
- aioamqp - 使用 asyncio 的 AMQP 實作.
- pyzmq - ZeroMQ 的 Python 綁定。
- aiozmq - 與 ZeroMQ 的替代 Asyncio 整合。
- crossbar - Crossbar.io 是一個用於分散式和微服務應用程式的網路平台。
- asyncio-nats - NATS 訊息系統的客戶端。
- aiokafka - Apache Kafka 用戶端。
資料庫驅動程式
連接到資料庫的庫。
- asyncpg - 適用於 Python/asyncio 的快速 PostgreSQL 資料庫客戶端程式庫.
- asyncpgsa - 具有 sqlalchemy 核心支援的 Asyncpg.
- aiopg - 用於存取 PostgreSQL 資料庫的函式庫。
- aiomysql - 用於存取 MySQL 資料庫的函式庫
- aioodbc - 用於存取 ODBC 資料庫的庫。
- motor - MongoDB 的非同步 Python 驅動程式。
- redis-py -Redis Python 客戶端(現在包括 aioreadis)。
- aiocouchdb - 基於 aiohttp (asyncio) 建置的 CouchDB 用戶端.
- aioinflux - 基於 aiohttp 建置的 InfluxDB 用戶端.
- aioes - 用於elasticsearch 的非同步相容驅動程式。
- peewee-async - 基於 peewee 和 aiopg 的 ORM 實作。
- GINO - 是一個基於 SQLAlchemy 核心的輕量級非同步 Python ORM,具有 asyncpg 方言。
- Tortoise ORM - 原生多後端 ORM,具有類似 Django 的 API 和簡單的關係管理。
- 資料庫 - SQLAlchemy 核心的非同步資料庫訪問,支援 PostgreSQL、MySQL 和 SQLite。
- Prisma Client Python - 由 Pydantic 支援並專為您的架構量身定制的自動生成、類型完全安全的 ORM - 支援 SQLite、PostgreSQL、MySQL、MongoDB、MariaDB 等。
- Piccolo - 一個 ORM / 查詢建構器,可以在非同步和同步模式下工作,具有漂亮的管理 GUI 和 ASGI 中間件。
- Beanie - 基於 motor 和 Pydantic 建構的非同步 MongoDB ODM。
聯網
在您的網路中進行通訊的庫。
- AsyncSSH - 提供 SSHv2 協定的非同步客戶端和伺服器實作。
- aiodns - 用於 asyncio 的簡單 DNS 解析器。
- aioping - ICMP (ping) 協定的快速非同步實作。
- httpx - Python 3 的非同步 HTTP 用戶端,具有請求相容的 API。
GraphQL
用於建立 GraphQL 伺服器的庫。
- Ariadne - 用於實作 GraphQL 伺服器的模式優先 Python 函式庫。
- Tartiflette - 架構優先的 Python 3.6+ GraphQL 引擎建構在
libgraphqlparser
之上。 - Strawberry - 程式碼優先的 Python 3 GraphQL 伺服器,支援 Django、Flask 和 FastAPI/Starlette。
測試
用於測試基於 asyncio 的應用程式的庫。
- aiomock - 支援非同步方法的 python 模擬庫。
- asynctest - 使用測試功能增強標準單元測試套件。非同步庫
- pytest-asyncio - Pytest 對 asyncio 的支持.
- aresponses - Asyncio http 模擬。類似於用於請求的回應庫。
- aioresponses - Python aiohttp 套件中模擬/虛假 Web 請求的幫助程式.
替代循環
替代異步循環實作。
- uvloop - 在 libuv 之上超快速實現非同步事件循環.
雜項
其他很棒的異步庫。
- aiochan - CSP 風格的並發,在 asyncio 之上具有通道、選擇和多處理。
- aiocache - 不同後端的快取管理器。
- aiofiles - 對 asyncio 的文件支援。
- aiopath - asyncio 的非同步
pathlib
。 - aiodebug - 用於監視和測試非同步程式的小型程式庫。
- aiorun - 一個
run()
函數,用於處理啟動和正常關閉的所有常用樣板。 - aiosc - 輕量級開放聲音控制實作。
- aioserial - pySerial 的直接替代品。
- aiozipkin - 使用 zipkin 進行 asyncio 的分散式追蹤工具
- asgiref - 用於 ASGI 到 WSGI 整合的後端實用程序,包括sync_to_async 和 async_to_sync 函數包裝器。
- async_property - 非同步屬性的 Python 裝飾器。
- ruia - 基於 asyncio 的非同步網路抓取微框架。
- kubernetes_asyncio - Kubernetes 的非同步客戶端程式庫。
- aiomisc -
asyncio
的雜項實用程式. - taskiq - 非同步分散式任務管理器(如 celery,但非同步)。
著作
文件、部落格文章和其他有關 asyncio 的精彩文章。
- 官方 asyncio 文件 - 非同步 I/O、事件循環、協程和任務。
- 對 asyncio 的簡短介紹 - 生成器、協程、本機協程和 async/await。
- AsyncIO for the Working Python Developer - 簡要介紹非同步編程,從基本範例到 URL 取得。
- Python aiohttp 的測試限制 - 使用 python-aiohttp 發出 100 萬個請求。
- ASGI(非同步伺服器閘道介面) - WSGI 的精神繼承者,旨在支援非同步的 Python Web 伺服器、框架和應用程式之間提供標準介面。
- FirstprinciplesIntroductiontoAsyncio - 對 asyncio 內部工作原理的非流行語第一原理介紹.
- 使用 FastAPI 和 Pytest 開發和測試非同步 API - 本教學課程說明如何使用測試驅動開發 (TDD) 使用 FastAPI 開發和測試非同步 API。
- Python Concurrency with asyncio - 了解如何使用並發程式設計和尖端的 asyncio 函式庫來加速緩慢的 Python 程式碼。
會談
關於 asyncio 的精彩演講的錄音。
- 有興趣的主題 (Python Asyncio) |截圖影片 |幻燈片 - PyCon Brasil 2015 主題演講(David Beazley)。
- Python 非同步 I/O 演練 - 8 部分程式碼演練(PhilipGuo)。
- Python 3.5 中的非同步/等待及其為何出色 - EuroPython 2016 (Yury Selivanov)。
- 非同步中的恐懼與等待:協程夢想之心的野蠻之旅 |截圖影片 - PyOhio 2016 主題演講(David Beazley)。
- 適合初學者的非同步 Python |幻燈片 - PyCon 2017(Miguel Grinberg)。
- 揭秘 Python 的 Async 和 Await 關鍵字 - JetBrains TV 2020 (Michael Kennedy)
非同步的替代方案
Python 中非同步程式設計的替代方法,其中一些嘗試支援與asyncio
的某些相容性,有些則根本不相容。
- curio - 協程並發庫。
- Curio-Asyncio Bridge - 基本 curio -> 非同步協程橋。
- trio - 適用於人類和蛇人的 Pythonic 非同步 I/O。
- trio-asyncio - 在 Trio 之上重新實現 asyncio 主循環.
- AnyIO - 高級非同步並發和網路框架,在 trio 或 asyncio 之上工作。