作为一款异步 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 开头:
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 命令来运行:
以上就是“使用 Sanic 框架进行 Python Web 开发教程”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/11312/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取