Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/miguelgrinberg/aioflask
Flask running on asyncio!
https://github.com/miguelgrinberg/aioflask
async-await asyncio flask greenlet
Last synced: 4 days ago
JSON representation
Flask running on asyncio!
- Host: GitHub
- URL: https://github.com/miguelgrinberg/aioflask
- Owner: miguelgrinberg
- License: mit
- Created: 2020-07-16T17:58:43.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-06-20T11:57:35.000Z (over 1 year ago)
- Last Synced: 2024-05-02T04:52:49.143Z (6 months ago)
- Topics: async-await, asyncio, flask, greenlet
- Language: Python
- Homepage:
- Size: 97.7 KB
- Stars: 200
- Watchers: 17
- Forks: 16
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- License: LICENSE
Awesome Lists containing this project
README
# aioflask
![Build status](https://github.com/miguelgrinberg/aioflask/workflows/build/badge.svg) [![codecov](https://codecov.io/gh/miguelgrinberg/aioflask/branch/main/graph/badge.svg?token=CDMKF3L0ID)](https://codecov.io/gh/miguelgrinberg/aioflask)
Flask 2.x running on asyncio!
Is there a purpose for this, now that Flask 2.0 is out with support for async
views? Yes! Flask's own support for async handlers is very limited, as the
application still runs inside a WSGI web server, which severely limits
scalability. With aioflask you get a true ASGI application, running in a 100%
async environment.WARNING: This is an experiment at this point. Not at all production ready!
## Quick start
To use async view functions and other handlers, use the `aioflask` package
instead of `flask`.The `aioflask.Flask` class is a subclass of `flask.Flask` that changes a few
minor things to help the application run properly under the asyncio loop. In
particular, it overrides the following aspects of the application instance:- The `route`, `before_request`, `before_first_request`, `after_request`,
`teardown_request`, `teardown_appcontext`, `errorhandler` and `cli.command`
decorators accept coroutines as well as regular functions. The handlers all
run inside an asyncio loop, so when using regular functions, care must be
taken to not block.
- The WSGI callable entry point is replaced with an ASGI equivalent.
- The `run()` method uses uvicorn as web server.There are also changes outside of the `Flask` class:
- The `flask aiorun` command starts an ASGI application using the uvicorn web
server.
- The `render_template()` and `render_template_string()` functions are
asynchronous and must be awaited.
- The context managers for the Flask application and request contexts are
async.
- The test client and test CLI runner use coroutines.## Example
```python
import asyncio
from aioflask import Flask, render_templateapp = Flask(__name__)
@app.route('/')
async def index():
await asyncio.sleep(1)
return await render_template('index.html')
```