SimpleDao
gunicorn配置
2019-05-06, 访问数: 1468

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来提高并发。

安装

  1. 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),将变量传递给执行环境

启动示例

  1. gunicorn --workers=4 mysite.wsgi:application
  2. --bind=127.0.0.1:8000
  3. --bind=[::1]:8000
  4. --worker-class=gevent
  5. --worker-connections=1000
  6. --env DJANGO_SETTINGS_MODULE=myproject.settings.main