319 lines
15 KiB
HTML
319 lines
15 KiB
HTML
<blockquote>
|
||
<p>[!WARNING] This project is looking for a new home. I’m no longer
|
||
maintaining it. Please let me know if you want to take over maintainance
|
||
for it. Write me an email to timo@furrer.life</p>
|
||
</blockquote>
|
||
<h1 id="awesome-asyncio-awesome">Awesome asyncio <a
|
||
href="https://github.com/sindresorhus/awesome"><img
|
||
src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg"
|
||
alt="Awesome" /></a></h1>
|
||
<blockquote>
|
||
<p>A carefully curated list of awesome Python asyncio frameworks,
|
||
libraries, software and resources.</p>
|
||
</blockquote>
|
||
<p>The Python <a
|
||
href="https://docs.python.org/3/library/asyncio.html">asyncio</a> module
|
||
introduced to the standard library with Python 3.4 provides
|
||
infrastructure for writing single-threaded concurrent code using
|
||
coroutines, multiplexing I/O access over sockets and other resources,
|
||
running network clients and servers, and other related primitives.</p>
|
||
<p>Asyncio is not really a brand-new technology however it appears to be
|
||
very trending since a few years - especially in the Python community and
|
||
with the release of Python 3.4 in March 2014. Thus, it’s pretty hard to
|
||
keep yourself up-to-date with the most awesome packages out there. Find
|
||
some of those <em>awesome</em> packages here and if you are missing one
|
||
we count on you to <a
|
||
href="https://github.com/timofurrer/awesome-asyncio/blob/master/CONTRIBUTING.md">create
|
||
an Issue or a Pull Request</a> with your suggestion.</p>
|
||
<h2 id="contents">Contents</h2>
|
||
<ul>
|
||
<li><a href="#web-frameworks">Web Frameworks</a></li>
|
||
<li><a href="#message-queues">Message Queues</a></li>
|
||
<li><a href="#database-drivers">Database Drivers</a></li>
|
||
<li><a href="#networking">Networking</a></li>
|
||
<li><a href="#graphql">GraphQL</a></li>
|
||
<li><a href="#testing">Testing</a></li>
|
||
<li><a href="#alternative-loops">Alternative Loops</a></li>
|
||
<li><a href="#misc">Misc</a></li>
|
||
<li><a href="#writings">Writings</a></li>
|
||
<li><a href="#talks">Talks</a></li>
|
||
<li><a href="#alternatives-to-asyncio">Alternatives to asyncio</a></li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="web-frameworks">Web Frameworks</h2>
|
||
<p><em>Libraries to build web applications.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/tiangolo/fastapi">FastAPI</a> - A very
|
||
high performance Python 3.6+ API framework based on type hints. Powered
|
||
by Starlette and Pydantic.</li>
|
||
<li><a href="https://www.djangoproject.com/">Django</a> - An
|
||
established, high-level Python web framework with a huge community and
|
||
ecosystem.</li>
|
||
<li><a href="https://github.com/encode/starlette">Starlette</a> - A
|
||
lightweight ASGI framework/toolkit for building high performance
|
||
services.</li>
|
||
<li><a href="https://github.com/KeepSafe/aiohttp">aiohttp</a> - Http
|
||
client/server for asyncio (PEP-3156).</li>
|
||
<li><a href="https://github.com/channelcat/sanic">sanic</a> - Python
|
||
3.5+ web server that’s written to go fast.</li>
|
||
<li><a href="https://github.com/pallets/quart">Quart</a> - An asyncio
|
||
web microframework with the same API as Flask.</li>
|
||
<li><a href="https://github.com/crossbario/autobahn-python">autobahn</a>
|
||
- WebSocket and WAMP supporting asyncio and Twisted, for clients and
|
||
servers.</li>
|
||
<li><a href="https://github.com/aaugustin/websockets/">websockets</a> -
|
||
A library for building WebSocket servers and clients in Python with a
|
||
focus on correctness and simplicity.</li>
|
||
<li><a href="http://www.tornadoweb.org/en/stable/">Tornado</a> -
|
||
Performant web framework and asynchronous networking library.</li>
|
||
<li><a href="https://github.com/encode/uvicorn">uvicorn</a> - The
|
||
lightning-fast ASGI server.</li>
|
||
</ul>
|
||
<h2 id="message-queues">Message Queues</h2>
|
||
<p><em>Libraries to implement applications using message
|
||
queues.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/Polyconseil/aioamqp">aioamqp</a> - AMQP
|
||
implementation using asyncio.</li>
|
||
<li><a href="https://github.com/zeromq/pyzmq">pyzmq</a> - Python
|
||
bindings for ZeroMQ.</li>
|
||
<li><a href="https://github.com/aio-libs/aiozmq">aiozmq</a> -
|
||
Alternative Asyncio integration with ZeroMQ.</li>
|
||
<li><a href="https://github.com/crossbario/crossbar">crossbar</a> -
|
||
Crossbar.io is a networking platform for distributed and microservice
|
||
applications.</li>
|
||
<li><a href="https://github.com/nats-io/asyncio-nats">asyncio-nats</a> -
|
||
Client for the NATS messaging system.</li>
|
||
<li><a href="https://github.com/aio-libs/aiokafka">aiokafka</a> - Client
|
||
for Apache Kafka.</li>
|
||
</ul>
|
||
<h2 id="database-drivers">Database Drivers</h2>
|
||
<p><em>Libraries to connect to databases.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/MagicStack/asyncpg">asyncpg</a> - Fast
|
||
PostgreSQL Database Client Library for Python/asyncio.</li>
|
||
<li><a href="https://github.com/CanopyTax/asyncpgsa">asyncpgsa</a> -
|
||
Asyncpg with sqlalchemy core support.</li>
|
||
<li><a href="https://github.com/aio-libs/aiopg/">aiopg</a> - Library for
|
||
accessing a PostgreSQL database.</li>
|
||
<li><a href="https://github.com/aio-libs/aiomysql">aiomysql</a> -
|
||
Library for accessing a MySQL database</li>
|
||
<li><a href="https://github.com/aio-libs/aioodbc">aioodbc</a> - Library
|
||
for accessing a ODBC databases.</li>
|
||
<li><a href="https://github.com/mongodb/motor">motor</a> - The async
|
||
Python driver for MongoDB.</li>
|
||
<li><a href="https://github.com/redis/redis-py">redis-py</a> - Redis
|
||
Python Client (which includes <a
|
||
href="https://github.com/aio-libs/aioredis">aioreadis</a> now).</li>
|
||
<li><a href="https://github.com/aio-libs/aiocouchdb">aiocouchdb</a> -
|
||
CouchDB client built on top of aiohttp (asyncio).</li>
|
||
<li><a href="https://github.com/plugaai/aioinflux">aioinflux</a> -
|
||
InfluxDB client built on top of aiohttp.</li>
|
||
<li><a href="https://github.com/aio-libs/aioes">aioes</a> - Asyncio
|
||
compatible driver for elasticsearch.</li>
|
||
<li><a href="https://github.com/05bit/peewee-async">peewee-async</a> -
|
||
ORM implementation based on <a
|
||
href="https://github.com/coleifer/peewee">peewee</a> and aiopg.</li>
|
||
<li><a href="https://github.com/fantix/gino">GINO</a> - is a lightweight
|
||
asynchronous Python ORM based on <a
|
||
href="https://www.sqlalchemy.org/">SQLAlchemy</a> core, with <a
|
||
href="https://github.com/MagicStack/asyncpg">asyncpg</a> dialect.</li>
|
||
<li><a href="https://github.com/tortoise/tortoise-orm">Tortoise ORM</a>
|
||
- native multi-backend ORM with Django-like API and easy relations
|
||
management.</li>
|
||
<li><a href="https://github.com/encode/databases">Databases</a> - Async
|
||
database access for SQLAlchemy core, with support for PostgreSQL, MySQL,
|
||
and SQLite.</li>
|
||
<li><a href="https://github.com/RobertCraigie/prisma-client-py">Prisma
|
||
Client Python</a> - An auto-generated, fully type safe ORM powered by
|
||
Pydantic and tailored specifically for your schema - supports SQLite,
|
||
PostgreSQL, MySQL, MongoDB, MariaDB and more.</li>
|
||
<li><a href="https://github.com/piccolo-orm/piccolo">Piccolo</a> - An
|
||
ORM / query builder which can work in async and sync modes, with a nice
|
||
admin GUI, and ASGI middleware.</li>
|
||
<li><a href="https://beanie-odm.dev">Beanie</a> - An async MongoDB ODM
|
||
built on <a href="https://github.com/mongodb/motor">motor</a> and <a
|
||
href="https://pydantic-docs.helpmanual.io">Pydantic</a>.</li>
|
||
</ul>
|
||
<h2 id="networking">Networking</h2>
|
||
<p><em>Libraries to communicate in your network.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/ronf/asyncssh">AsyncSSH</a> - Provides
|
||
an asynchronous client and server implementation of the SSHv2
|
||
protocol.</li>
|
||
<li><a href="https://github.com/saghul/aiodns">aiodns</a> - Simple DNS
|
||
resolver for asyncio.</li>
|
||
<li><a href="https://github.com/stellarbit/aioping">aioping</a> - Fast
|
||
asyncio implementation of ICMP (ping) protocol.</li>
|
||
<li><a href="https://github.com/encode/httpx">httpx</a> - asynchronous
|
||
HTTP client for Python 3 with <a
|
||
href="https://github.com/psf/requests">requests</a> compatible API.</li>
|
||
</ul>
|
||
<h2 id="graphql">GraphQL</h2>
|
||
<p><em>Libraries to build GraphQL servers.</em></p>
|
||
<ul>
|
||
<li><a href="https://ariadnegraphql.org">Ariadne</a> - Schema-first
|
||
Python library for implementing GraphQL servers.</li>
|
||
<li><a href="https://tartiflette.io/">Tartiflette</a> - Schema-first
|
||
Python 3.6+ GraphQL engine built on top of
|
||
<code>libgraphqlparser</code>.</li>
|
||
<li><a href="https://strawberry.rocks">Strawberry</a> - Code-first
|
||
Python 3 GraphQL server with Django, Flask and FastAPI/Starlette
|
||
support.</li>
|
||
</ul>
|
||
<h2 id="testing">Testing</h2>
|
||
<p><em>Libraries to test asyncio based applications.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/nhumrich/aiomock/">aiomock</a> - A
|
||
python mock library that supports async methods.</li>
|
||
<li><a href="https://github.com/Martiusweb/asynctest/">asynctest</a> -
|
||
Enhance the standard unittest package with features for testing. asyncio
|
||
libraries</li>
|
||
<li><a
|
||
href="https://github.com/pytest-dev/pytest-asyncio">pytest-asyncio</a> -
|
||
Pytest support for asyncio.</li>
|
||
<li><a href="https://github.com/CircleUp/aresponses">aresponses</a> -
|
||
Asyncio http mocking. Similar to the <a
|
||
href="https://github.com/getsentry/responses">responses</a> library used
|
||
for <a href="https://github.com/requests/requests">requests</a>.</li>
|
||
<li><a
|
||
href="https://github.com/pnuckowski/aioresponses">aioresponses</a> -
|
||
Helper for mock/fake web requests in Python aiohttp package.</li>
|
||
</ul>
|
||
<h2 id="alternative-loops">Alternative Loops</h2>
|
||
<p><em>Alternative asyncio loop implementations.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/MagicStack/uvloop">uvloop</a> - Ultra
|
||
fast implementation of asyncio event loop on top of libuv.</li>
|
||
</ul>
|
||
<h2 id="misc">Misc</h2>
|
||
<p><em>Other awesome asyncio libraries.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/zh217/aiochan">aiochan</a> - CSP-style
|
||
concurrency with channels, select and multiprocessing on top of
|
||
asyncio.</li>
|
||
<li><a href="https://github.com/argaen/aiocache">aiocache</a> - Cache
|
||
manager for different backends.</li>
|
||
<li><a href="https://github.com/Tinche/aiofiles/">aiofiles</a> - File
|
||
support for asyncio.</li>
|
||
<li><a href="https://github.com/alexdelorenzo/aiopath">aiopath</a> -
|
||
Asynchronous <code>pathlib</code> for asyncio.</li>
|
||
<li><a href="https://github.com/qntln/aiodebug">aiodebug</a> - A tiny
|
||
library for monitoring and testing asyncio programs.</li>
|
||
<li><a href="https://github.com/cjrh/aiorun">aiorun</a> - A
|
||
<code>run()</code> function that handles all the usual boilerplate for
|
||
startup and graceful shutdown.</li>
|
||
<li><a href="https://github.com/artfwo/aiosc">aiosc</a> - Lightweight
|
||
Open Sound Control implementation.</li>
|
||
<li><a href="https://github.com/changyuheng/aioserial">aioserial</a> - A
|
||
drop-in replacement of <a
|
||
href="https://github.com/pyserial/pyserial">pySerial</a>.</li>
|
||
<li><a href="https://github.com/aio-libs/aiozipkin">aiozipkin</a> -
|
||
Distributed tracing instrumentation for asyncio with zipkin</li>
|
||
<li><a href="https://github.com/django/asgiref">asgiref</a> - Backend
|
||
utils for ASGI to WSGI integration, includes sync_to_async and
|
||
async_to_sync function wrappers.</li>
|
||
<li><a
|
||
href="https://github.com/ryananguiano/async_property">async_property</a>
|
||
- Python decorator for async properties.</li>
|
||
<li><a href="https://github.com/howie6879/ruia">ruia</a> - An async web
|
||
scraping micro-framework based on asyncio.</li>
|
||
<li><a
|
||
href="https://github.com/tomplus/kubernetes_asyncio">kubernetes_asyncio</a>
|
||
- Asynchronous client library for Kubernetes.</li>
|
||
<li><a href="https://github.com/aiokitchen/aiomisc">aiomisc</a> -
|
||
Miscellaneous utils for <code>asyncio</code>.</li>
|
||
<li><a href="https://taskiq-python.github.io/">taskiq</a> - Asynchronous
|
||
distributed task manager (like celery, but async).</li>
|
||
</ul>
|
||
<h2 id="writings">Writings</h2>
|
||
<p><em>Documentation, blog posts, and other awesome writing about
|
||
asyncio.</em></p>
|
||
<ul>
|
||
<li><a href="https://docs.python.org/3/library/asyncio.html">Official
|
||
asyncio documentation</a> - Asynchronous I/O, event loop, coroutines and
|
||
tasks.</li>
|
||
<li><a
|
||
href="http://masnun.com/2015/11/13/python-generators-coroutines-native-coroutines-and-async-await.html">Short
|
||
well-written intro to asyncio</a> - Generators, Coroutines, Native
|
||
Coroutines and async/await.</li>
|
||
<li><a
|
||
href="https://hackernoon.com/asyncio-for-the-working-python-developer-5c468e6e2e8e">AsyncIO
|
||
for the Working Python Developer</a> - A gentle introduction to
|
||
asynchronous programming from basic examples working up to URL
|
||
fetching.</li>
|
||
<li><a
|
||
href="https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html">Test
|
||
limits of Python aiohttp</a> - Making 1 million requests with
|
||
python-aiohttp.</li>
|
||
<li><a href="https://asgi.readthedocs.io/en/latest/">ASGI (Asynchronous
|
||
Server Gateway Interface)</a> - A spiritual successor to WSGI, intended
|
||
to provide a standard interface between async-capable Python web
|
||
servers, frameworks, and applications.</li>
|
||
<li><a
|
||
href="https://hackernoon.com/a-simple-introduction-to-pythons-asyncio-595d9c9ecf8c">First
|
||
Principles Introduction to Asyncio</a> - A no-buzzword first principles
|
||
introduction to the internal workings of asyncio.</li>
|
||
<li><a href="https://testdriven.io/blog/fastapi-crud/">Developing and
|
||
Testing an Asynchronous API with FastAPI and Pytest</a> - This tutorial
|
||
looks at how to develop and test an asynchronous API with FastAPI using
|
||
Test-Driven Development (TDD).</li>
|
||
<li><a
|
||
href="https://www.manning.com/books/python-concurrency-with-asyncio">Python
|
||
Concurrency with asyncio</a> - Learn how to speed up slow Python code
|
||
with concurrent programming and the cutting-edge asyncio library.</li>
|
||
</ul>
|
||
<h2 id="talks">Talks</h2>
|
||
<p><em>Recordings of awesome talks about asyncio.</em></p>
|
||
<ul>
|
||
<li><a href="https://youtu.be/ZzfHjytDceU">Topics of Interest (Python
|
||
Asyncio)</a> | <a href="https://youtu.be/lYe8W04ERnY">screencast</a> |
|
||
<a
|
||
href="https://speakerdeck.com/dabeaz/topics-of-interest-async">slides</a>
|
||
- PyCon Brasil 2015 keynote (David Beazley).</li>
|
||
<li><a
|
||
href="https://www.youtube.com/playlist?list=PLpEcQSRWP2IjVRlTUptdD05kG-UkJynQT">Python
|
||
Asynchronous I/O Walkthrough</a> - 8-part code walkthrough (Philip
|
||
Guo).</li>
|
||
<li><a
|
||
href="https://www.youtube.com/watch?v=m28fiN9y_r8&t=132s">Async/await
|
||
in Python 3.5 and why it is awesome</a> - EuroPython 2016 (Yury
|
||
Selivanov).</li>
|
||
<li><a href="https://www.youtube.com/watch?v=E-1Y4kSsAFc">Fear and
|
||
Awaiting in Async: A Savage Journey to the Heart of the Coroutine
|
||
Dream</a> | <a
|
||
href="https://www.youtube.com/watch?v=Bm96RqNGbGo">screencast</a> -
|
||
PyOhio 2016 keynote (David Beazley).</li>
|
||
<li><a href="https://www.youtube.com/watch?v=iG6fr81xHKA">Asynchronous
|
||
Python for the Complete Beginner</a> | <a
|
||
href="https://speakerdeck.com/pycon2017/miguel-grinberg-asynchronous-python-for-the-complete-beginner">slides</a>
|
||
- PyCon 2017 (Miguel Grinberg).</li>
|
||
<li><a href="https://www.youtube.com/watch?v=F19R_M4Nay4">Demystifying
|
||
Python’s Async and Await Keywords</a> - JetBrains TV 2020 (Michael
|
||
Kennedy)</li>
|
||
</ul>
|
||
<h2 id="alternatives-to-asyncio">Alternatives to asyncio</h2>
|
||
<p><em>Alternative approaches to async programming in Python, some of
|
||
which attempt to support some compatibility with <code>asyncio</code>,
|
||
others are not compatible at all.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/dabeaz/curio">curio</a> - The coroutine
|
||
concurrency library.
|
||
<ul>
|
||
<li><a href="https://github.com/dabeaz/curio/issues/190">Curio-Asyncio
|
||
Bridge</a> - basic curio -> asyncio coroutine bridge.</li>
|
||
</ul></li>
|
||
<li><a href="https://github.com/python-trio/trio">trio</a> - Pythonic
|
||
async I/O for humans and snake people.
|
||
<ul>
|
||
<li><a
|
||
href="https://github.com/python-trio/trio-asyncio">trio-asyncio</a> -
|
||
re-implementation of the asyncio mainloop on top of Trio.</li>
|
||
</ul></li>
|
||
<li><a href="https://github.com/agronholm/anyio">AnyIO</a> - High level
|
||
asynchronous concurrency and networking framework that works on top of
|
||
either trio or asyncio.</li>
|
||
</ul>
|
||
<p><a href="https://github.com/timofurrer/awesome-asyncio">asyncio.md
|
||
Github</a></p>
|