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 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: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 jsonapp = 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/

使用 Sanic 框架进行 Python Web 开发相关推荐

  1. python web开发入门_python大佬整理的python web开发从入门到精通学习笔记

    原标题:python大佬整理的python web开发从入门到精通学习笔记 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通 ...

  2. python web开发 Bootstrap框架基础

    文章目录 1. 安装 2. Bootstrap 5 基本应用 learning from <python web开发从入门到精通> Bootstrap 是最受欢迎的 前端组件库,用于 HT ...

  3. 篇一、Flask打造 Python Web 开发的灵活框架,实现简易登录。要求有 Python、HTML 和 CSS 基础。

    ⭐ 简介:大家好,我是zy阿二,我是一名对知识充满渴望的自由职业者. ☘️ 最近我沉溺于Python的学习中.你所看到的是我的学习笔记. ❤️ 如果对你有帮助,请关注.点赞,让我们共同进步.有不足之处 ...

  4. Python Web开发——Django框架学习

    文章目录 Web开发简介 Web应用技术 Web前端开发 Web后端开发 使用 Django 开发后端服务 项目目标 管理员操作 登录界面 客户管理界面 添加客户界面 药品管理界面 添加药品界面 订单 ...

  5. python论坛app_理解python web开发,轻松搭建web app!

    大家好,今天分享给大家的是理解python web开发,轻松搭建web app,希望大家学有所获! 因为 python代码的优雅美观且易于维护这一特点,越来越多的人选择使用 Python做web开发. ...

  6. python在线搭建教程_理解python web开发,轻松搭建web app!

    大家好,今天分享给大家的是理解python web开发,轻松搭建web app,希望大家学有所获! 因为 python代码的优雅美观且易于维护这一特点,越来越多的人选择使用 Python做web开发. ...

  7. Python web 开发:部署一个3行代码的wsgi app

    通过前面的两篇: Python Web开发:从 wsgi 开始 Python Web开发:开发wsgi中间件 我们已经知道我们平时开发的 django.flask 等 python web 项目本质上 ...

  8. pythonweb开发-手把手教你写网站:Python WEB开发技术实战

    摘要:本文详细介绍了Python WEB开发的基础入门.以一个博客站点的开发为例讲解了基于Django框架开发WEB站点的全过程.通过本文的学习可以快速掌握基于Django的Python WEB的开发 ...

  9. python web-手把手教你写网站:Python WEB开发技术实战

    摘要:本文详细介绍了Python WEB开发的基础入门.以一个博客站点的开发为例讲解了基于Django框架开发WEB站点的全过程.通过本文的学习可以快速掌握基于Django的Python WEB的开发 ...

最新文章

  1. socket通信——通过Udp传输方式,将一段文字数据发送出去
  2. python绘图和可视化_Python 绘图和可视化详细介绍
  3. 【c++】28.虚析构函数、纯虚函数
  4. mysql移植海思_minigui在海思解决方案(hi3515芯片)上的移植过程(转)
  5. 进程间通信-system-v
  6. restful风格案例
  7. yocto rootfs 支持pam
  8. Windows下,Unicode、UTF8,GBK(GB2312)互转
  9. Python使用for实现无限循环的多种方法
  10. 腾讯2021校园招聘-后台综合-第一次笔试 8.23 20.00-22.00 Apare_xzc
  11. 快手7亿用户增长实践
  12. The Shawshank Redemption-6
  13. PyTorch之填充操作
  14. 微信小程序(PHP服务端)之仿淘票票,制作电影购票程序
  15. FPGA VHDL文本编辑器设计8-3优先编码器并构成16-4优先编码器
  16. Three.js - SpotLight 光源
  17. 【免费压缩图片的在线地址】
  18. 如何安全的保存密码?
  19. 每周学一个小轮子之 可以缩放的ScalableView(1),android开发者指南
  20. Linux用户认证方法简介

热门文章

  1. 聊一聊tiktok上面的无人直播可行吗?
  2. C语言中结构体、联合(union)、枚举(enum)相关知识点
  3. 2019/4/2UPC团队训练题解(A,B,E,G,I,K,L)加补题(C,D)
  4. 华为手机丢失被盗了无法找回怎么删除丢失华为手机里的数据?
  5. Linux中的地址空间以及I/O地址空间
  6. enumerate的用法
  7. Windows Mobile 6.5 安装 QQ 正式版本后无法浏览 WSP 网页的问题!
  8. UI设计中的按钮设计规范
  9. 在Rabbitmq管理台发送消息
  10. 使用ArrayList中的subList方法