Accelerate your web app development | Build fast. Run fast.
Go to file
Jeong YunWon 15e7d8ab2e Handle hooks parameters in more debuggable way
1. not list() -> callable()
The args of hooking parameters of Sanic have to be callables.
For wrong parameters, errors will be generated from:
```
    listeners += args
```

By checking just list type, the raised error will be associated
with `[args]` instead of `args`, which is not given by users.
With this patch, the raised error will be associated with `args`.
Then users can notice their argument was neither callable nor list
in the easier way.

2. Function -> Functions in document
Regarding the parameter as a list is harmless to the user code.
But unawareness of its type can be list can limit the potent of
the user code.
2016-12-28 18:14:57 +09:00
docs Merge pull request #217 from cr0hn/patch-3 2016-12-23 22:31:03 -08:00
examples allow overriding logging.basicConfig 2016-12-23 16:17:34 -08:00
sanic Handle hooks parameters in more debuggable way 2016-12-28 18:14:57 +09:00
tests Merge pull request #212 from r0fls/176 2016-12-25 09:13:51 -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 merge gitignore 2016-10-15 23:17:25 +00:00
.travis.yml Update to make flake8 actually work 2016-12-25 19:05:11 -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 class based views implementation for sanic 2016-11-25 09:10:25 +02: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 Update to make flake8 actually work 2016-12-25 19:05:11 -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!  |
   ▀▀█████▄▄ ▀██████▄██ | _________________/
   ▀▄▄▄▄▄  ▀▀█▄▀█════█▀ |/
        ▀▀▀▄  ▀▀███ ▀       ▄▄
     ▄███▀▀██▄████████▄ ▄▀▀▀▀▀▀█▌
   ██▀▄▄▄██▀▄███▀ ▀▀████      ▄██
▄▀▀▀▄██▄▀▀▌████▒▒▒▒▒▒███     ▌▄▄▀
▌    ▐▀████▐███▒▒▒▒▒▐██▌
▀▄▄▄▄▀   ▀▀████▒▒▒▒▄██▀
          ▀▀█████████▀
        ▄▄██▀██████▀█
      ▄██▀     ▀▀▀  █
     ▄█             ▐▌
 ▄▄▄▄█▌              ▀█▄▄▄▄▀▀▄
▌     ▐                ▀▀▄▄▄▀
 ▀▀▄▄▀