一、前言
为什么要用Sanic,请见 让你的Python(Web应用)飞起来,(异步/协程)全家桶
废话不多讲,直接进入正题,我会按照正常的Web应用程序架构来讲Sanic的用法
二、进入正题
基本操作
- 安装Sanic
pip install sanic
- 导入Sanic
1 | 复制代码from sanic import Sanic |
中间件(Middleware And Listeners)
服务启动之前
1 | 复制代码@app.listener('before_server_start') |
服务停止之前
1 | 复制代码@app.listener('after_server_stop') |
请求(Request)中间件
1 | 复制代码@app.middleware('request') |
响应(Response)中间件
1 | 复制代码@app.middleware('response') |
蓝图(Blueprint)
类似Flask,用来组织应用程序,也就是大多数我们mvc模式中的controller,
- 首先声明一个BP
1 | 复制代码order_bp = Blueprint('orders', url_prefix='v1/api/order') |
- 在主程序中(main.py)引用
1 | 复制代码from controller.order_controller import order_bp |
- 使用蓝图处理异常
1 | 复制代码@bp.exception(NotFound) |
路由(Routing)
1 | 复制代码# GET 路由参数的方式 |
1 | 复制代码# Get params的方式 |
1 | 复制代码# 修改价格 |
响应类型
1 | 复制代码from sanic.response import json |
如果我想在Sanic启动之后额外运行任务怎么办?
1 | 复制代码app.add_task(notify_server_started()) |
三、启动Sanic服务
1 | 复制代码if __name__ == "__main__": |
在启动时可以传入一些参数,其他的都是字面意思,很好理解,这里讲一下 Workers
workers
接受integer
类型,默认为1,传入4意味着Sanic会为你复制四份,创建四个进程来运行你的Sanic App
如图
多进程状态下,路由会进行自动分配,从而增加吞吐量,
workers
的个数依据自身服务器性能而定,如果创建太多会出现占用情况,同样多进程模式下,你的数据库连接或者数据库连接池的数量也要适当调大,否则会出现连接数过多而拒绝连接的情况
四、获奖感言
Sanic的介绍就这么多,只是一个基本入门,至于其他类似订阅发布监听等等功能大家可以移步 Sanic官网 进行学习和查阅
下期我可能会联合Sanic讲解关于异步Redis(aioredis)的使用,例子打算用类似订单倒计时的功能,结合redis的订阅发布通知来讲
本文转载自: 掘金