Jingwei's

Stay Hungry , Stay Foolish.

11 Apr 2021

03 Gunicorn 运行

基本用法

gunicorn [OPTIONS] [WSGI_APP]

这里的WSGI_APP一般格式是模块名称加上变量名称。在20.1.0这个版本后,这个地方变成了一个config文件。 举例来说:文件名为test.py

def app(environ, start_response):
    """Simplest possible application object"""
    data = b'Hello, World!\n'
    status = '200 OK'
    response_headers = [
        ('Content-type', 'text/plain'),
        ('Content-Length', str(len(data)))
    ]
    start_response(status, response_headers)
    return iter([data])

这时候你要启动程序要用下面的命令:

gunicorn --workers=2 test:app

这里的变量名称也可以是一个函数调用,比如上面的的例子可以改成这样的:

def create_app():
    app = FrameworkApp()
    ...
    return app

这样调用也是一样的效果:

gunicorn --workers=2 'test:create_app()'

常用配置参数

  • -c CONFIG, –config=CONFIG 定义配置文件的路径
  • -b BIND, –bind=BIND 定义服务器通信地址和端口
  • -w WORKERS, –workers=WORKERS 定义工作进程的数量,这个数量大概每个CPU配置2-4个
  • -k WORKERCLASS –worker-class=WORKERCLASS 要运行哪种类型的工作进程。可以设置为(sync, eventlet, gevent, tornado, gthread. sync)中的一种。
  • -n APP_NAME, –name=APP_NAME 如果开启了可以设置进程名。 其他参数请查阅官方文档吧。

集成

Django

如果没有定义的话,gunicorn 会自动去调用一个WSGI的应用程序,比如一个典型的Django程序,gunicorn的格式如下:

gunicorn myproject.wsgi

部署起来相当方便哦。 上面要注意的是,你的项目要在python PATH下,最简单的办法就是和Django目录下的manage.py放在同一个目录。

还有个配置,这个可以直接配置Django settings中的内容:

gunicorn --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi

粘贴部署

gunicorn --paste development.ini -b :8080 --chdir /path/to/project
gunicorn --paste development.ini#admin -b :8080 --chdir /path/to/project