Sanic 既是一个Python web 服务器,又是一个web框架,它为速度而生。Sanic只支持Python 3.5及其以上版本,允许我们使用async/await
语法来使我们的代码非阻塞且快速。
通过pip安装Sanic
pip3 install sanic
Sanic 使用uvloop
和ujson
来提高性能。但是,目前Windows上不支持uvloop
,只能使用asnycio
原生的事件循环。不过不影响你在Windows上使用Sanic,不用担心这个问题,如果想深入了解 它就去看看Sanic的源码中server.py
和worker.py
。其实,就是在代码中import uvloop
时处理了ImportError
异常。
如果你不喜欢这两个包,可以通过设置环境变量SANIC_NO_UVLOOP=true
或SANIC_NO_UJSON=true
来禁止安装它们。
$ export SANIC_NO_UVLOOP=true
$ export SANIC_NO_UJSON=true
$ pip3 install sanic
Sanic简单示例
下面是一个最简单的Sanic web 应用,写入文件app-simple.py
:
# file: app-simple.py
from sanic import Sanic
from sanic.response import json
app = Sanic()
@app.route('/')
async def test(request):
msg = {'message': 'Welcom to 猿人学Python'}
return json(msg, ensure_ascii=False)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8888)
在命令行下运行这个web app:
python3 app-simple.py
运行成功可以看到如下输出:
[2019-03-21 21:29:57 +0800] [10766] [INFO] Goin' Fast @ http://127.0.0.1:8888
[2019-03-21 21:29:57 +0800] [10766] [INFO] Starting worker [10766]
用浏览器或curl
访问http://127.0.0.1:8888
,就可以看到输出结果。下面是命令curl -i http://127.0.0.1:8888
的结果:
HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 5
Content-Length: 39
Content-Type: application/json
{"message":"Welcom to 猿人学Python"}
Sanic示例详解
(1)首先,从sanic
包导入Sanic
类,这个是一个Sanic web app (web应用)的入口类。根据我们app的响应数据类型从sanic.response
导入相应的响应函数,比如本例中的json()
。
(2)接着,生成一个Sanic
的实例app
。
(3)app
实例有两个最常用的方法app.route()
和app.run()
。app.route()
是一个装饰器,通过它定义我们app的访问路径(路由),比如本例中的test()
函数就是用来响应根路径:/
。
通过@app.route()
可以定义整个web app的各种路由。
(4)最后,通过app.run()
方法来运行app,开启一个web服务。
使用Sanic开发web应用的过程就是这么简单。如果开发复杂的网站,就是不断重复第三步,并使用blueprint
来使代码结构更清晰。后面,我们将一一介绍使用Sanic开发网站的方方面面。你准备好了吗,让我们一起开启Sanic开发之旅吧!

我的公众号:猿人学 Python 上会分享更多心得体会,敬请关注。
***版权申明:若没有特殊说明,文章皆是猿人学 yuanrenxue.con 原创,没有猿人学授权,请勿以任何形式转载。***
现在有公司生产用Sanic了吗
想請問與tornado 相比 有甚麼優缺點呢