共计 2358 个字符,预计需要花费 6 分钟才能阅读完成。
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 结尾:
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() 是最根底的组成部分,通常咱们会在一个名为 hello.py 的文件中将其实例化,当然文件名称并不是必须的, 然而咱们还是举荐应用 hello.py 做为文件名称来实例化 Sanic 对象。
from sanic import Sanic
from sanic.response import json
app = 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 技术大本营,获取更多技能与教程。