开发者社区> 幸运码发放> 正文

python 异步Web框架sanic

简介:
+关注继续查看

python 异步Web框架sanic

我们继续学习Python异步编程,这里将介绍异步Web框架sanic,为什么不是tornado?从框架的易用性来说,Flask要远远比tornado简单,可惜flask不支持异步,而sanic就是类似Flask语法的异步框架。

github:https://github.com/huge-success/sanic

不过sanic对环境有要求:

macOS/linux
python 3.6+
不过,我在macOS上安装 sanic 还是踩了坑。依赖库ujson一直安装失败。最后不得不卸载官方python,安装 miniconda(第三方Python安装包,集成了一些额外的工具)。

安装 sanic

pip3 install sanic
sanic 开发第一个例子

编写官方的第一个例子hello.py:

from sanic import Sanic
from sanic.response import json
from sanic.exceptions import NotFound

app = Sanic(name="pyapp")

@app.route('/')
async def test(request):

return json({'hello': 'world'})

if name == '__main__':

app.error_handler.add(
    NotFound,
    lambda r, e: sanic.response.empty(status=404)
)
app.run(host='0.0.0.0', port=8000)

运行上面的程序:

python3 hello.py

[2020-04-21 23:12:02 +0800] [18487] [INFO] Goin Fast @ http://0.0.0.0:8000
[2020-04-21 23:12:02 +0800] [18487] [INFO] Starting worker [18487]
通过浏览器访问:http://localhost:8000/

请求堵塞
针对上面的例子,假设test() 视图函数的处理需要5秒钟,那么请求就堵塞了。

……

from time import sleep

app = Sanic(name="pyapp")

@app.route('/')
async def test(request):

sleep(5)
return json({'hello': 'world'})

……
重启服务,通过浏览器发送请求,我们发现请求耗时5秒,这显然对用户就不能忍受的。

异步非堵塞
所以,我们要实现异步调用,修改后的完整代码如下:

import asyncio
from sanic import Sanic
from sanic.response import json
from sanic.exceptions import NotFound
from time import sleep, ctime

app = Sanic(name="pyapp")

async def task_sleep():

print('sleep before', ctime())
await asyncio.sleep(5)
print('sleep after', ctime())

@app.route('/')
async def test(request):

myLoop = request.app.loop
myLoop.create_task(task_sleep())
return json({'hello': 'world'})

if name == '__main__':

app.error_handler.add(
    NotFound,
    lambda r, e: sanic.response.empty(status=404)
)
app.run(host='0.0.0.0', port=8000)

关于python异步的使用参考上一篇文章,重新启动服务。这次前端就不在堵塞了。

如果看 sanic 的运行日志:

sleep before Tue Apr 21 23:43:14 2020
sleep after Tue Apr 21 23:43:19 2020
他仍然在执行,但不会堵塞test()视图函数的响应。

原文地址https://www.cnblogs.com/fnng/p/12783542.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python编程:sanic异步web框架
Python编程:sanic异步web框架
58 0
【Python】简单Web框架从零开始(一):Web服务
一、前言 使用Python可以很方便的搭建一个网站,有很多现成的Web框架可以使用例如:Django,Tornado,web.py,web2py,Flask,Bottle等等。我几年前使用Tornado框架为项目做过一个多人协作的管理平台,后来为了想深入学习就自己写了一个简单的Web框架,并在新项目中投入使用已有1年左右,虽然没有上面提到的那些框架那么强大,但也勉强够用。这次刚好有时间做一个简单的记录。
32 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
10181 0
Python Web 框架 Flask 快速入门 | 图谱精选课程
Flask,一个基于Python实现的、基于MVC设计模式的、轻量级的Web开发框架
156 0
Goji —— 基于 Go 语言的微型 web 框架
Goji 是一个基于 Go 的微型 web 框架,其设计受到了 Sinatra 的启发。
115 0
(三)Java版Spring Cloud B2B2C o2o鸿鹄云商平台--技术框架
公司要搭建未来服务开发的统一标准,也考虑到框架的可拓展及可伸缩性,能够顺应时代的潮流,鸿鹄云商平台(honghu)业务的可拓展性比较随性,考虑到未来运营方案多样化及快速响应产品&用户需求、新业务的快速迭代变更,作为平台的总架构师,我推荐公司使用当前业界最流行的Spring Cloud分布式微服务云...
1231 0
【我们一起写框架】MVVM的WPF框架(三)—数据控件
这世上,没人能一次性写出完美无缺的框架;因为,任何一个框架都需要项目的淬炼,然后才能升华,趋近完美。 所以,框架是个反复修改的东西,最终形成的东西。 如果你学了一点技术,觉得自己可以写出框架了,觉得自己有架构师的能力,然而自己总是怀才不遇——那一定是你的错觉。
986 0
2015年Web框架评测
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/45365261 2015年Web框架评测 国外的TechEmpower公司今年再次发布了2015年Web框架评测报告。
580 0
(三):C++分布式实时应用框架——系统管理模块
C++分布式实时应用框架——系统管理模块     上篇:(二): 基于ZeroMQ的实时通讯平台   版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律追究的权利!     一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个”封闭“的系统。
1320 0
+关注
幸运码发放
阿里云优惠码阿里云推荐券bieryun.com
171
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载