Accelerate your web app development | Build fast. Run fast.
Go to file
channelcat caedd7284a Merge pull request #21 from kolanos/normalize-linebreaks
Introduce end-of-line normalization
2016-10-15 13:38:44 -07:00
docs . 2016-10-14 05:01:18 -07:00
examples Reformatted code to use spaces instead of tabs 2016-10-14 19:53:49 -07:00
sanic Introduce end-of-line normalization 2016-10-15 12:59:00 -07:00
tests Introduce end-of-line normalization 2016-10-15 12:59:00 -07:00
.gitattributes Introduce end-of-line normalization 2016-10-15 12:59:00 -07:00
.gitignore Introduce end-of-line normalization 2016-10-15 12:59:00 -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 Introduce end-of-line normalization 2016-10-15 12:59:00 -07: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!  | 
   ▀▀█████▄▄ ▀██████▄██ | _________________/
   ▀▄▄▄▄▄  ▀▀█▄▀█════█▀ |/
        ▀▀▀▄  ▀▀███ ▀       ▄▄
     ▄███▀▀██▄████████▄ ▄▀▀▀▀▀▀█▌
   ██▀▄▄▄██▀▄███▀ ▀▀████      ▄██
▄▀▀▀▄██▄▀▀▌████▒▒▒▒▒▒███     ▌▄▄▀
▌    ▐▀████▐███▒▒▒▒▒▐██▌
▀▄▄▄▄▀   ▀▀████▒▒▒▒▄██▀
          ▀▀█████████▀
        ▄▄██▀██████▀█
      ▄██▀     ▀▀▀  █
     ▄█             ▐▌
 ▄▄▄▄█▌              ▀█▄▄▄▄▀▀▄
▌     ▐                ▀▀▄▄▄▀
 ▀▀▄▄▀