基于python的web应用框架-Uvicorn
研究背景:通过python语言,书写相关的算法接口,供本部门和别的部门相关同事调用实现相关功能,完成不同部门之间的工作合作。问题描述:不知道如何写接口,也不了解如何测试接口,调用接口。原因分析:第一次用python去写接口,对接口概念不是很了解,也不知道如何去写接口。解决方案:1.参考公司已拥有python接口代码,了解该接口使用的框架,最终确定使用uvicorn框架。2.向搞微服务的同仁请教接口
研究背景:
通过python语言,书写相关的算法接口,供本部门和别的部门相关同事调用实现相关功能,完成不同部门之间的工作合作。
问题描述:
不知道如何写接口,也不了解如何测试接口,调用接口。
原因分析:
第一次用python去写接口,对接口概念不是很了解,也不知道如何去写接口。
解决方案:
1.参考公司已拥有python接口代码,了解该接口使用的框架,最终确定使用uvicorn框架。
2.向研究微服务的同仁请教接口的测试方法,得知接口自带的测试方法如下:http://192.168.196.89:8080/docs#/。IP和端口可以根据自己实际书写的接口改变。
Uvicorn相关知识:
uvicorn
简介:是一个基于 asyncio
开发的一个轻量级高效的 web 服务器框架。是基于 uvloop 和 httptools 构建的非常快速的 ASGI 服务器,官网链接:http://www.uvicorn.org
uvloop和httptools:
- uvloop 用于替换标准库 asyncio 中的事件循环,使用 Cython 实现,它非常快,可以使 asyncio 的速度提高 2-4 倍。
- httptools 是 nodejs HTTP 解析器的 Python 实现。
- asyncio 是高性能异步模块,写异步代码离不开它。
uvicorn
初衷:
- 使用
uvloop
和httptools
实现一个极速的asyncio
服务器。 - 实现一个基于
ASGI(异步服务器网关接口)
的最小的应用程序接口。
uvicorn
支持类型:目前支持 http
,websockets
,Pub/Sub
广播,并且可以扩展到其他协议和消息类型。
uvicorn
安装: pip3 install uvicorn 或 pip install uvicorn 注意:uvicorn
目前仅支持 python 3.5.3 以上版本。
uvicorn
内部构造查看:
uvicorn
代码测试:
uvicorn安装成功后。就可以来编写我们的服务器应用代码了。先创建一个应用文件 app.py
(名字可以自取),在这个文件中,来编写一个简单的服务器应用。
这里涉及到协程和异步,参考:https://www.cnblogs.com/xinghun85/p/9937741.html,https://zhuanlan.zhihu.com/p/27258289
# coding:utf-8
async def hello_world(message, channels,a):
content = b'<h1>Hello World</h1>'
resp = {
'status': 200,
'headers': [[b'content-type', b'text/html'],],
'content': content,
}
await channels['reply'].send(resp)
代码运行:uvicorn app:hello_world (运行方式: uvicorn文件名:callable对象名
)
出现以下结果表示服务运行成功:
[32mINFO[0m: Started server process [[36m2316[0m]
[32mINFO[0m: Waiting for application startup.
[32mINFO[0m: ASGI 'lifespan' protocol appears unsupported.
[32mINFO[0m: Application startup complete.
[32mINFO[0m: Uvicorn running on [1mhttp://127.0.0.1:8000[0m (Press CTRL+C to quit)
或者参考截图:
浏览器访问:
在后台服务开启的前提下,我们在任意浏览器中访问 http://127.0.0.1:8000, 网页上若显示出 h1 号字体的 Hello World,也就是我们代码中定义的 content 的字符串内容表示运行成,否则就运行失败。
经测试报错:
更多推荐
所有评论(0)