sanic/README.md

79 lines
3.2 KiB
Markdown
Raw Normal View History

2016-05-26 05:52:42 +01:00
# Sanic
2016-10-10 00:00:09 +01:00
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 | 30,601 | 3.23ms |
2016-10-15 07:31:47 +01:00
| 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 |
2016-10-10 00:00:09 +01:00
2016-10-10 00:02:06 +01:00
## Hello World
2016-10-14 12:51:08 +01:00
```python
2016-10-10 00:02:06 +01:00
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)
```
2016-10-10 00:00:09 +01:00
## Installation
* `python -m pip install git+https://github.com/channelcat/sanic/`
## Documentation
* [Getting started](docs/getting_started.md)
2016-10-14 13:00:43 +01:00
* [Request Data](docs/request_data.md)
* [Routing](docs/routing.md)
2016-10-14 22:08:30 +01:00
* [Middleware](docs/middleware.md)
* [Exceptions](docs/exceptions.md)
* [Contributing](docs/contributing.md)
* [License](LICENSE)
## TODO:
* Streamed file processing
* File output
* Examples of integrations with 3rd-party modules
* RESTful router
* Blueprints?
2016-10-14 12:51:08 +01:00
## Limitations:
* No wheels for uvloop and httptools on Windows :(
2016-10-10 00:00:09 +01:00
## Final Thoughts:
2016-05-26 05:52:42 +01:00
2016-09-13 08:20:13 +01:00
▄▄▄▄▄
▀▀▀██████▄▄▄ _______________
▄▄▄▄▄ █████████▄ / \
▀▀▀▀█████▌ ▀▐▄ ▀▐█ | Gotta go fast! |
▀▀█████▄▄ ▀██████▄██ | _________________/
▀▄▄▄▄▄ ▀▀█▄▀█════█▀ |/
▀▀▀▄ ▀▀███ ▀ ▄▄
▄███▀▀██▄████████▄ ▄▀▀▀▀▀▀█▌
██▀▄▄▄██▀▄███▀ ▀▀████ ▄██
▄▀▀▀▄██▄▀▀▌████▒▒▒▒▒▒███ ▌▄▄▀
▌ ▐▀████▐███▒▒▒▒▒▐██▌
▀▄▄▄▄▀ ▀▀████▒▒▒▒▄██▀
▀▀█████████▀
▄▄██▀██████▀█
▄██▀ ▀▀▀ █
▄█ ▐▌
▄▄▄▄█▌ ▀█▄▄▄▄▀▀▄
▌ ▐ ▀▀▄▄▄▀
2016-10-10 00:00:09 +01:00
▀▀▄▄▀