flask框架_Flask: flask框架是如何实现非阻塞并发的

cfc48d98b9452d80e76a3a55ff9c1e18.png

写在前面:Flask框架是通过多线程/多进程+阻塞的socket实现非阻塞,其本质是基于python的源库socketserver实现的

  1. 前言
  2. 认识WSGI协议
  3. 认识Werkzeug
  4. flask是如何实现非阻塞的
本文使用的flask框架为最新的1.1.1版本,所有代码基于python3运行

一:前言

使用过flask或者其他web框架的人应该对web框架这种东西并不陌生,它是通过对一系列包括请求处理、路由分发、session管理甚至网络攻防等各个模块的封装,让使用者可以快速搭建起一个web应用,让开发者可以将更多的精力放在业务逻辑代码的coding上,而不用过多的去对偏底层的部分进行开发。这次,我试着通过《flask框架是如何实现非阻塞并发的》这篇文章加上对flask源码的分析尝试解答以下几个问题:

  • flask框架的大体架构是怎样的
  • 什么是WSGI协议
  • Werkzeug和flask是什么关系,和WSGI又是什么关系
  • 非阻塞并发的功能是在flask哪个部分实现的,又是如何实现的

首先我们看一下一个基本的flask应用程序:

import 

当我们在浏览器种访问http://127.0.0.1:8088/index的时候,系统会被time.sleep(15)阻塞15秒才能够得到返回,而当在这15秒内我们再次访问http://127.0.0.1:8088访问另外一个路由的时候,"hello world"会立刻返回,说明该请求未被前一个请求阻塞。现在,我们尝试对app.run()之后发生的事情做一个分析。

run()函数位于flask/app.py中的Flask类下,核心代码如下:

def 

在run函数内,函数设置了服务启动的address,port等信息,最后引入了一个werkzeug库的run_simple方法,另外还传入了一个options参数。要特别注意的是,options.setdefault("threaded",True)这行代码在最初的flask 0.1系列版本种是不存在的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值