wsgi协议
Python web开发中,服务端程序可分为2个部分:
- 服务器程序(用来接收、整理客户端发送的请求,容器),比如gunicorn,uwsgi
- 应用程序(处理服务器程序传递过来的请求),比如Flask,Django等
服务器程序和应用程序要互相配合才能给用户提供服务,而不同应用程序(不同框架)会有不同的函数、功能。 此时,我们就需要一个标准,让服务器程序和应用程序都支持这个标准,这样,二者就能很好的配合了。
WSGI:wsgi是python web开发的标准,类似于协议。它是服务器程序和应用程序的一个约定,规定了各自使用的接口和功能,以便二和互相配合。
通俗地说,就是服务器程序(gunicorn)接收用户的http请求,然后按照wsgi协议的规定,调用应用程序(Django),然后Django调用业务逻辑,返回数据给服务器程序(gunicorn),最后返回给用户端。
gunicorn
gunicorn是基于 pre-fork 模型的。也就意味着有一个中心管理进程( master process )用来管理 worker 进程集合,Master从不知道任何关于客户端的信息,所有的请求和响应处理都是由 worker 进程来处理。而且是纯Python实现,可以使用gevent来提高并发。
安装
pip install gunicorn
主要参数
- -b ADDRESS, —bind ADDRESS 绑定服务器端口地址,Host形式的字符串格式,可绑定多个,-b 127.0.0.1:8000 -b [::1]:9000
- —worker-class STRTING 要使用的工作模式,默认为sync
- —threads INT 处理请求的工作线程数,使用指定数量的线程运行每个worker
- —worker-connections INT 最大客户端并发数量,默认情况下这个值为1000
- —max-requests INT 重新启动之前,工作将处理的最大请求数,默认值为0
- -t INT, —timeout INT 超过这么多秒后工作将被杀掉,并重新启动,一般设定为30秒
- -e ENV, —env ENV 设置环境变量(key=value),将变量传递给执行环境
启动示例
gunicorn --workers=4 mysite.wsgi:application
--bind=127.0.0.1:8000
--bind=[::1]:8000
--worker-class=gevent
--worker-connections=1000
--env DJANGO_SETTINGS_MODULE=myproject.settings.main