大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。
本篇文章将详细介绍 Python 高性能 Web 异步框架 Sanic 的各功能,并通过实战将爬虫(Spiders)模块+视图(Views)模块+路由(Routers)模块+模型(Models)模块结合形成一个各模块独立、高性能、可读性高、可扩展性高、具有精美的接口文档、易于后期维护的爬虫 API 项目,并部署在 Ubuntu 服务器上供团队调用。
目录
一、Sanic 简介及特性
说到 Python Web 框架, 你可能会想到 Flask、Django、Tornado、FastAPI这些;而本文将向大家介绍另一个 Python Web 框架 —— Sanic。
它是一个 Python 3.8+ Web 服务器和 Web 框架,旨在快速运行。它允许使用 Python 3.5 中添加的 async/await 语法,这使您的代码非阻塞且快速。
应用场景
如果你希望快速搭建一个小型的 API 项目,又对速度有非常大的需求,那 Sanic 无疑是你的天选框架,很哇塞的哟!
Sanic 特性
- 直接支持生产环境部署
- 高度可扩展
- 内置快速网络服务器
- 具有异步支持
- 使用 Redoc、Swagger 的 OpenAPI 文档
- CORS 保护等
Sanic 安装
pip install sanic -i https://pypi.doubanio.com/simple
默认安装最新版,也可指定你需要的版本
二、Sanic 各功能测试
快速上手
先来快速构建一个简单的 Python Web 应用:
from sanic import Sanic
from sanic.response import json
from datetime import datetime
import multiprocessing
app = Sanic("SanicAPP")
HOST = "localhost"
PORT = 7777
app.config.FALLBACK_ERROR_FORMAT = 'json'
app.config.ACCESS_LOG = True
async def get_datetime():
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@app.route('/getdatetime')
async def getdatetime(request):
return json({"now": await get_datetime(), 'server_name': request.server_name, 'path': request.path})
if __name__ == "__main__":
app.run(host=HOST, port=PORT, debug=False, auto_reload=True, workers=multiprocessing.cpu_count() // 5)
于生产环境启动运行:
该程序创建了一个可以访问当前时间的接口,并且使用异步支持,程序处理速度会更快,还进行了一些全局配置:开启访问日志、开启自动重载、CPU 工作数量为当前系统的 1/5(CPU 数量设置越多,并发处理速度越快)、将 404 页面以 json 格式返回等
访问成功示例:
访问失败示例:
访问日志:
FBV 模式
其意为“基于函数的视图”(Function-based View),尽管从个人角度来说此模式可能不太利于后期开发,可读性也不太好,但还是需要学习一下的:
from query_tag import Query
q = Query()
async def request_parse(reque