Accelerate your web app development | Build fast. Run fast.
Go to file
C. Bess 9d7488f59d Fix list formatting in Request Data docs
Added two spaces after line to force newline in markdown. Code emphasized in lists.
2016-10-15 13:09:16 -05:00
docs Fix list formatting in Request Data docs 2016-10-15 13:09:16 -05:00
examples Reformatted code to use spaces instead of tabs 2016-10-14 19:53:49 -07:00
sanic Reformatted code to use spaces instead of tabs 2016-10-14 19:53:49 -07:00
tests Added wheezy to benchmarks 2016-10-14 23:31:47 -07:00
.gitignore Added tests and middleware, and improved documentation 2016-10-14 03:23:48 -07:00
LICENSE Added tests and middleware, and improved documentation 2016-10-14 03:23:48 -07:00
README.md Added wheezy to benchmarks 2016-10-14 23:31:47 -07:00
requirements.txt . 2016-10-03 07:27:54 +00:00
setup.py Reformatted code to use spaces instead of tabs 2016-10-14 19:53:49 -07:00

Sanic

Sanic is a Flask-like Python 3.5+ web server that's written to go fast. It's based off the work done by the amazing folks at magicstack, and was inspired by this article: https://magic.io/blog/uvloop-blazing-fast-python-networking/.

On top of being flask-like, sanic supports async request handlers. This means you can use the new shiny async/await syntax from Python 3.5, making your code non-blocking and speedy.

Benchmarks

All tests were run on a AWS medium instance running ubuntu, using 1 process. Each script delivered a small JSON response and was tested with wrk using 100 connections. Pypy was tested for falcon and flask, but did not speed up requests.

Server Implementation Requests/sec Avg Latency
Sanic Python 3.5 + uvloop 29,128 3.40ms
Wheezy gunicorn + meinheld 20,244 4.94ms
Falcon gunicorn + meinheld 18,972 5.27ms
Flask gunicorn + meinheld 4,988 20.08ms
Aiohttp Python 3.5 + uvloop 2,974 33.49ms

Hello World

from sanic import Sanic
from sanic.response import json

app = Sanic(__name__)

@app.route("/")
async def test(request):
    return json({ "hello": "world" })

app.run(host="0.0.0.0", port=8000)

Installation

  • python -m pip install git+https://github.com/channelcat/sanic/

Documentation

TODO:

  • Streamed file processing
  • File output
  • Examples of integrations with 3rd-party modules
  • RESTful router
  • Blueprints?

Limitations:

  • No wheels for uvloop and httptools on Windows :(

Final Thoughts:

                 ▄▄▄▄▄
        ▀▀▀██████▄▄▄       _______________
      ▄▄▄▄▄  █████████▄  /                 \
     ▀▀▀▀█████▌ ▀▐▄ ▀▐█ |   Gotta go fast!  | 
   ▀▀█████▄▄ ▀██████▄██ | _________________/
   ▀▄▄▄▄▄  ▀▀█▄▀█════█▀ |/
        ▀▀▀▄  ▀▀███ ▀       ▄▄
     ▄███▀▀██▄████████▄ ▄▀▀▀▀▀▀█▌
   ██▀▄▄▄██▀▄███▀ ▀▀████      ▄██
▄▀▀▀▄██▄▀▀▌████▒▒▒▒▒▒███     ▌▄▄▀
▌    ▐▀████▐███▒▒▒▒▒▐██▌
▀▄▄▄▄▀   ▀▀████▒▒▒▒▄██▀
          ▀▀█████████▀
        ▄▄██▀██████▀█
      ▄██▀     ▀▀▀  █
     ▄█             ▐▌
 ▄▄▄▄█▌              ▀█▄▄▄▄▀▀▄
▌     ▐                ▀▀▄▄▄▀
 ▀▀▄▄▀