栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

flask性能怎么样_flask是干嘛的?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

flask性能怎么样_flask是干嘛的?

什么是Web服务器

Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache、 Nginx 、IIS。

什么是WSGI

Web服务器网关接口(Web Server Gateway Interface),是为了让Web服务器与Python程序或框架能够进行数据交流而定义的接口规范。也就是说,只要Web服务器和Web应用都遵守WSGI协议,那么Web服务器和Web应用就可以随意的组合。

WSGI应用

根据WSGI的规定,Web应用(或被称为WSGI应用)必须是一个可调用对象(callable object),且要满足以下三个条件:

    接受environ和start_response两个参数内部调用start_response函数来生成状态码和响应头返回一个可迭代的响应体
用函数实现一个WSGI应用
def application(environ, start_response):
    """
        environ:包含了请求的所有信息的字典。
        start_response:用来发起响应的函数,参数是状态码、响应头。
	"""
    start_response('200 OK', [('Content-Type', 'text/plain')])
    yield b'Hello, World!n'
用类实现一个WSGI应用
class AppClass:
    def __init__(self, environ, start_response):
        self.environ = environ
        self.start_response= start_response

    def __iter__(self):
        self.start_response('200 OK', [('Content-Type', 'text/plain')])
        yield b'Hello, World!n'
Flask的WSGI实现
class Flask(_PackageBoundObject):
	def wsgi_app(self, environ, start_response):
        ...
         
	def __call__(self, environ, start_response):
        """Shortcut for :attr:`wsgi_app`."""
        return self.wsgi_app(environ, start_response)
WSGI服务器 调用WSGI应用的简易实现(仅用于理解)
from io import BytesIO

def call_application(app, environ):
    status = None
    headers = None
    body = BytesIO()
    
    def start_response(rstatus, rheaders):
        nonlocal status, headers
        status, headers = rstatus, rheaders
        
    app_iter = app(environ, start_response)
    try:
        for data in app_iter:
            assert status is not None and headers is not None, 
                "start_response() was not called"
            body.write(data)
    finally:
        if hasattr(app_iter, 'close'):
            app_iter.close()
    return status, headers, body.getvalue()

environ = {...}  # "environ" dict
status, headers, body = call_application(app, environ)
用Python内置的wsgiref模块实现WSGI服务器
from wsgiref.simple_server import make_server

def wsgi_app(environ, start_response):
    ...

server = make_server('0.0.0.0', 5000, wsgi_app)
server.serve_forever()
用WerkZeug模块实现WSGI服务器

用flask run命令运行时,实际上是在运行Werkzeug实现的WSGI服务器

from werkzeug.serving import run_simple

def wsgi_app(environ, start_response):
    ...
    
run_simple('0.0.0.0', 5000, wsgi_app)
参考

WEB服务器_百度百科 (baidu.com)
Web Server Gateway Interface - Wikipedia

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号