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!
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:
route
, before_request
, before_first_request
, after_request
,teardown_request
, teardown_appcontext
, errorhandler
and cli.command
run()
method uses uvicorn as web server.There are also changes outside of the Flask
class:
flask aiorun
command starts an ASGI application using the uvicorn webrender_template()
and render_template_string()
functions areimport asyncio
from aioflask import Flask, render_template
app = Flask(__name__)
@app.route('/')
async def index():
await asyncio.sleep(1)
return await render_template('index.html')