使用 Sanic 框架进行 Python Web 开发

【使用 Sanic 框架进行 Python Web 开发】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 = https://www.it610.com/article/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?? 开头:
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 框架进行 Python Web 开发
文章图片

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()?? 是最基础的组成部分,通常我们会在一个名为 ??hello.py?? 的文件中将其实例化,当然文件名称并不是必须的, 但是我们还是推荐使用 ??hello.py?? 做为文件名称来实例化 Sanic 对象。
from sanic import Sanic from sanic.response import jsonapp = Sanic("My Hello, world app")@app.route('/') async def test(request): return json({'hello': 'world'})if __name__ == '__main__': app.run()

Sanic can now be easily run using ??sanic hello.app??
以上就是本次分享的全部内容,现在想要学习编程的小伙伴欢迎关注Python技术大本营,获取更多技能与教程。
使用 Sanic 框架进行 Python Web 开发
文章图片

    推荐阅读