使用 Sanic 框架进行 Python Web 开发

网友投稿 981 2022-05-30

asyncio 模块

作为一款异步 Python 3.7+ web 框架,Sanic 最基本的构建块是 Python 标准库中的 asyncio 模块。

2014 年初发布的 Python 3.4 是在新添加的 asyncio 模块中将协程概念引入标准库的第一步。 使用标准的 Python 生成器,可以在发生其他事情时暂停函数的执行,然后可以将数据注入该函数以使其恢复执行。 如果那时有一个对象“循环”通过需要工作的任务列表,我们可以同时进入和退出多个函数的执行。 这可以在单个线程中实现“并发”,并且是 asyncio 思想的基础。

快速浏览一下 Python 3.4 中的异步编程是什么样的:

import asyncio @asyncio.coroutine def get_value(): yield from asyncio.sleep(1) return 123 @asyncio.coroutine def slow_operation(): value = yield from get_value() print(">>", value) loop = asyncio.get_event_loop() loop.run_until_complete(slow_operation()) loop.close()

运行结果:DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead,可以看到 Python 3.8 中这种使用方式被取消了。

现在的用法是使用 async def 开头:

使用 Sanic 框架进行 Python Web 开发

import asyncio import time async def say_after(delay, what): await asyncio.sleep(delay) print(what) async def main(): print(f"started at {time.strftime('%X')}") await say_after(1, 'hello') await say_after(2, 'world') print(f"finished at {time.strftime('%X')}") asyncio.run(main())

输出结果:

started at 23:39:52 hello world finished at 23:39:55

新的 asyncio 模块的语言和语法都非常强大,但有点笨拙。 对于经验不足的 Python 开发人员来说,生成器通常有点神秘和困难。 收益究竟来自什么? 这东西对很多人来说都是陌生的; Python 需要更好的语法。

Sanic 框架

经典的 Django 和 Flask 是一种同步的框架,而没有一种异步框架。

2016 年夏天,Sanic 的诞生就是为了探索这个差距。 这个想法很简单:我们可以从 Flask 中获取一个带有看起来很简单的 API 的应用程序并使其异步/等待吗?

不知何故,这个想法起飞并获得了认可。 这不是一个最初以重做 Python 应用程序处理 Web 请求的方式为目标的项目。 这在很大程度上是一个意外暴露的案例。 该项目迅速爆发并引起了轰动。 让 Flask 采用这种新模式有很大的吸引力。 但是,由于 Flask 本身无法做到这一点,所以很多人认为 Sanic 可能是 Flask 的异步版本。

开发人员很高兴有机会使用最新的 Python 为他们的应用程序带来全新的性能水平。

Sanic 的目的:提供一个简单的方法来启动和运行一个高性能的HTTP服务器,该服务器易于构建、扩展,并最终扩展。

Sanic的口号是。"快速建设。快速运行"(Build fast.Run fast)。这当然强调了项目的性能导向。它也说明了一个目标,即在Sanic中构建一个应用程序是为了让人感到直观。启动和运行一个应用程序不应该意味着要学习一套复杂的API,并且要不断地打开第二个浏览器窗口查看文档。当其他工具大量使用 "黑匣子 "式的功能,如全局变量、"魔法 "导入和猴子补丁时,Sanic通常更倾向于朝编写好的、干净的和习惯性的 Python(又称pythonic代码)方向发展。如果你知道 Python,你可以用 Sanic 构建一个网络 API。

比如我们来看一个简单的 Hello World例子。

Hello World Example

首先使用 pip3 install sanic 命令安装 sanic 模块。

Installing collected packages: aiofiles, websockets, httptools, sanic-routing, multidict, sanic Successfully installed aiofiles-0.8.0 httptools-0.4.0 multidict-6.0.2 sanic-22.3.0 sanic-routing-22.3.0 websockets-10.2

Sanic() 是最基础的组成部分,通常我们会在一个名为 server.py 的文件中将其实例化,当然文件名称并不是必须的, 但是我们还是推荐使用 server.py 做为文件名称来实例化 Sanic 对象。

from sanic import Sanic from sanic.response import json app = Sanic("MyHelloworldapp") @app.route('/') async def test(request): return json({'hello': 'world'}) if __name__ == '__main__': app.run()

Sanic 通过 sanic server.app 命令来运行:

然后我们访问:http://127.0.0.1:8000,就能访问到服务器返回的 json 数据,如下界面:

至此,我们一个简单的 Hello World 应用就完成了。

请继续跟着我来探索后续如何利用这款异步框架做点有意思的内容吧。

最后附上官网链接:https://sanic.dev/zh/

Python web前端

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【愚公系列】2022年04月 Kubernetes容器集群快速部署之kind高可用集群
下一篇:maven概述
相关文章