Accelerate your web app development | Build fast. Run fast.
Go to file
2017-01-31 12:46:02 -08:00
docs Merge pull request #380 from channelcat/openapi-extension 2017-01-31 07:39:38 -06:00
examples Merge pull request #335 from r0fls/remove-loop 2017-01-27 19:25:09 -06:00
sanic typo: async_run -> run_async 2017-01-31 12:46:02 -08:00
tests Revert "fix async run, add tests" 2017-01-31 07:30:17 -06: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 branch 'master' into sphinx-docs 2017-01-19 08:48:54 +11:00
.travis.yml Updated password 2017-01-30 02:22:12 -08:00
CHANGELOG.md Reverse static arguments 2016-10-25 02:45:28 -07:00
environment.yml fix conflict part 2 2017-01-29 16:32:57 -08:00
LICENSE Added tests and middleware, and improved documentation 2016-10-14 03:23:48 -07:00
README.rst Added basic readthedocs support 2017-01-29 12:47:00 -08:00
readthedocs.yml Adding readthedocs file 2017-01-29 16:40:36 -08:00
requirements-dev.txt Added basic readthedocs support 2017-01-29 12:47:00 -08:00
requirements.txt Trimmed down features of CIMultiDict 2017-01-16 16:12:42 -08:00
setup.py Updated password 2017-01-30 02:22:12 -08:00
tox.ini Revert "fix async run, add tests" 2017-01-31 07:30:17 -06:00

Sanic
=================================

|Join the chat at https://gitter.im/sanic-python/Lobby| |Build Status| |PyPI| |PyPI version|

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.

Sanic is developed `on GitHub <https://github.com/channelcat/sanic/>`_. Contributions are welcome!

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 Example
-------------------

.. code:: python

    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
-------------

`Documentation on Readthedocs <http://sanic.readthedocs.io/>`_.

.. |Join the chat at https://gitter.im/sanic-python/Lobby| image:: https://badges.gitter.im/sanic-python/Lobby.svg
   :target: https://gitter.im/sanic-python/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
.. |Build Status| image:: https://travis-ci.org/channelcat/sanic.svg?branch=master
   :target: https://travis-ci.org/channelcat/sanic
.. |Documentation| image:: https://readthedocs.org/projects/sanic/badge/?version=latest
   :target: http://sanic.readthedocs.io/en/latest/?badge=latest
.. |PyPI| image:: https://img.shields.io/pypi/v/sanic.svg
   :target: https://pypi.python.org/pypi/sanic/
.. |PyPI version| image:: https://img.shields.io/pypi/pyversions/sanic.svg
   :target: https://pypi.python.org/pypi/sanic/

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!  |
       ▀▀█████▄▄ ▀██████▄██ | _________________/
       ▀▄▄▄▄▄  ▀▀█▄▀█════█▀ |/
            ▀▀▀▄  ▀▀███ ▀       ▄▄
         ▄███▀▀██▄████████▄ ▄▀▀▀▀▀▀█▌
       ██▀▄▄▄██▀▄███▀ ▀▀████      ▄██
    ▄▀▀▀▄██▄▀▀▌████▒▒▒▒▒▒███     ▌▄▄▀
    ▌    ▐▀████▐███▒▒▒▒▒▐██▌
    ▀▄▄▄▄▀   ▀▀████▒▒▒▒▄██▀
              ▀▀█████████▀
            ▄▄██▀██████▀█
          ▄██▀     ▀▀▀  █
         ▄█             ▐▌
     ▄▄▄▄█▌              ▀█▄▄▄▄▀▀▄
    ▌     ▐                ▀▀▄▄▄▀
     ▀▀▄▄▀