Accelerate your web app development | Build fast. Run fast.
Go to file
Cadel Watson 7654c2f902 Use Sphinx for documentation.
This commit creates configuration files and an index page for
documentation using Sphinx. The recommonmark package is used to enable
Markdown support for Sphinx, using the Common Mark specification. This
means that the current documentation doesn't need to be rewritten.
2016-12-25 20:24:34 +11:00
docs Use Sphinx for documentation. 2016-12-25 20:24:34 +11:00
examples Merge pull request #193 from r0fls/jinja-example 2016-12-13 00:30:07 -06:00
sanic Increment version to 0.1.9 2016-12-24 18:51:16 -08:00
tests Add test for PR: #215 2016-12-24 18:47:15 -08:00
.coveragerc add tox for test and coverage automation. Add development requirements.txt 2016-10-15 11:56:34 +02:00
.gitattributes Introduce end-of-line normalization 2016-10-15 12:59:00 -07:00
.gitignore Use Sphinx for documentation. 2016-12-25 20:24:34 +11:00
.travis.yml Adds python36 to tox.ini and .travis.yml 2016-12-24 14:06:53 -08:00
CHANGELOG.md Reverse static arguments 2016-10-25 02:45:28 -07:00
LICENSE Added tests and middleware, and improved documentation 2016-10-14 03:23:48 -07:00
README.md Create documentation for testing server endpoints. 2016-12-23 11:08:04 +11:00
requirements-dev.txt Use Sphinx for documentation. 2016-12-25 20:24:34 +11:00
requirements.txt Fixing import of CIMultiDict 2016-11-19 18:41:40 -08:00
setup.py Fixing import of CIMultiDict 2016-11-19 18:41:40 -08:00
tox.ini Adds python36 to tox.ini and .travis.yml 2016-12-24 14:06:53 -08:00

Sanic

Join the chat at https://gitter.im/sanic-python/Lobby

Build Status PyPI PyPI

Sanic is a Flask-like Python 3.5+ web server that's written to go fast. It's based on 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 an 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 33,342 2.96ms
Wheezy gunicorn + meinheld 20,244 4.94ms
Falcon gunicorn + meinheld 18,972 5.27ms
Bottle gunicorn + meinheld 13,596 7.36ms
Flask gunicorn + meinheld 4,988 20.08ms
Kyoukai Python 3.5 + uvloop 3,889 27.44ms
Aiohttp Python 3.5 + uvloop 2,979 33.42ms
Tornado Python 3.5 2,138 46.66ms

Hello World

from sanic import Sanic
from sanic.response import json


app = Sanic()


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

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

Installation

  • python -m pip install sanic

Documentation

TODO:

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

Limitations:

  • No wheels for uvloop and httptools on Windows :(

Final Thoughts:

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