java中的接口是类吗
291
2022-09-08
使用 Sanic 框架进行 Python Web 开发(使用伪造变造机动车号牌怎么处罚)
asyncio 模块
作为一款异步 Python 3.7+ web 框架,Sanic 最基本的构建块是 Python 标准库中的 asyncio 模块。
2014 年初发布的 Python 3.4 是在新添加的 asyncio 模块中将协程概念引入标准库的第一步。 使用标准的 Python 生成器,可以在发生其他事情时暂停函数的执行,然后可以将数据注入该函数以使其恢复执行。 如果那时有一个对象“循环”通过需要工作的任务列表,我们可以同时进入和退出多个函数的执行。 这可以在单个线程中实现“并发”,并且是 asyncio 思想的基础。快速浏览一下 Python 3.4 中的异步编程是什么样的:
import asyncio@asyncio.coroutinedef get_value(): yield from asyncio.sleep(1) return 123@asyncio.coroutinedef 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 asyncioimport timeasync 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:52helloworldfinished 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, sanic-routing, multidict, sanicSuccessfully installed aiofiles-0.8.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 Sanicfrom 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
官网链接:https://sanic.dev/zh/
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~