Flask running on asyncio!
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:
- The
route,before_request,before_first_request,after_request,teardown_request,teardown_appcontext,errorhandlerandcli.commanddecorators 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 runcommand starts the uvicorn web server. - The
render_template()function is asynchronous and must be awaited. The sync render version is available asrender_template_sync().
import asyncio
from aioflask import Flask
app = Flask(__name__)
@app.route('/')
async def index():
await asyncio.sleep(1)
return "Look Ma, I'm async!"