一. flaskdjango项目推荐使用自带run/runserver方法部署

二. Web服务器、WSGI、Flask/Django框架关系

1. WSGI简介

WSGI(Web Server Gateway Interface),既不是服务器,也不是应用,而是一种接口规范),描述web server如何web application通信规范:

1. 服务器请求处理调用符合WSGI规范网关接口2. 由网关接口调用应用程序,并且其要定义start_response(status, headers)函数用于返回响应3. 应用程序须是一个调用对象函数/类),webapp(environ, start_response)。接受两个参数environ环境设置字典,由服务器和WSGI网关接口设置start_response是由网关接口定义函数

网络通信完整流程:

创建一个web服务器,监听端口接收请求,并将请求路由转发对应应用程序。
再创建一个web应用程序用于接收请求,经过必要的处理返回响应服务器。
服务接收响应返回客户端浏览器

WSGI 只适用于 Python 语言定义了 web服务器和 web应用之间接口规范。解耦了服务器类与应用程序类,只要 web服务器和 web应用都遵守WSGI协议,那么 web服务器和 web应用就可以随意的组合

2. Application实现

WSGI规范规定,Application 必须是一个可调用的对象,它可以函数可以实现了__call__的类的实例对象,也可以是实现了__iter__的类对象。

不管是哪种方式的可调用对象,都要遵循两个原则
  1. 必须接收environ(WSGI环境信息), start_response(响应请求函数)两个参数;(这两个参数都由Web Server来定义的)
  2. 必须返回迭代的对象。
同理,Web Server也必须实现这两个对象,定义完成后,要调用application,将两个参数传入
3. Web框架协议体现

Web框架作用主要是方便我们开发 web应用程序,也遵循WSGI协议,以flask为例,遵循WSGI协议体现的源码

class Flask(_PackageBoundObject):
    .....
    def wsgi_app(self, environ, start_response):
        ctx = self.request_context(environ)
        error = None
        try:
            try:
                ctx.push()
                response = self.full_dispatch_request()
            except Exception as e:
                error = e
                response = self.handle_exception(e)
            except:
                error = sys.exc_info()[1]
                raise
            return response(environ, start_response)
        finally:
            if self.should_ignore_error(error):
                error = None
            ctx.auto_pop(error)

    def __call__(self, environ, start_response):
         return self.wsgi_app(environ, start_response)
    ...

在Flask处理请求的入口__call__方法, 又调用了另一个方法wsgi_app,所有的请求将会在这几行代码处理完成, 并且最终返回

4. uwsgi协议、uWSGI服务
  • uwsgiwsgi 一样也是一种协议,uWSGI服务器正是使用了 uwsgi 协议
  • uWSGI实现了 uwsgi 和 WSGI 两种协议的web服务器。注意 uWSGI 本质上也是一种 web服务器,处于上面描述的三层结构中的Web Server层。
三. Gunicorn
1. 简介
2. Gunicorn工作模式
gunicorn --worker-class=gevent --worker-connections=1000 --workers=3 main:app

worker-connection 是对于 gevent worker 类的特殊设置。(2CPU)+1 是建议的worker数量。因为这里是单核,我们设置的是3个worker。在这种情况下,最大并发请求数是3000(3个worker1000个连接数/worker)

3. Gunicorn实现高并发

原文地址:https://blog.csdn.net/lijianping962464/article/details/126299643

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_35652.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注