想要看一下Gunicorn的代码,运行一下Gunicorn,了解一下它的运行机制, 那么如何如行呢?
从Github上下载源码,
https://github.com/benoitc/gunicorn
执行
cd gunicorn/gunicorn
进入目录。
查看当前目录结构如下:
.
├── app
│ ├── base.py
│ ├── base.pyc
│ ├── djangoapp.py
│ ├── django_wsgi.py
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── pasterapp.py
│ ├── wsgiapp.py
│ └── wsgiapp.pyc
├── arbiter.py
├── arbiter.pyc
├── argparse_compat.py
├── _compat.py
├── _compat.pyc
├── config.py
├── config.pyc
├── debug.py
├── debug.pyc
├── errors.py
├── errors.pyc
├── glogging.py
├── glogging.pyc
├── http
│ ├── body.py
│ ├── body.pyc
│ ├── errors.py
│ ├── errors.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── message.py
│ ├── message.pyc
│ ├── parser.py
│ ├── parser.pyc
│ ├── _sendfile.py
│ ├── _sendfile.pyc
│ ├── unreader.py
│ ├── unreader.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── __init__.py
├── __init__.pyc
├── instrument
│ ├── __init__.py
│ └── statsd.py
├── management
│ ├── commands
│ │ ├── __init__.py
│ │ └── run_gunicorn.py
│ └── __init__.py
├── pidfile.py
├── pidfile.pyc
├── reloader.py
├── reloader.pyc
├── selectors.py
├── six.py
├── six.pyc
├── sock.py
├── sock.pyc
├── util.py
├── util.pyc
└── workers
├── async.py
├── base.py
├── base.pyc
├── _gaiohttp.py
├── gaiohttp.py
├── geventlet.py
├── ggevent.py
├── gthread.py
├── gtornado.py
├── __init__.py
├── __init__.pyc
├── sync.py
├── sync.pyc
├── workertmp.py
└── workertmp.pyc
注意
app/wsgiapp.py是运行Gunicorn的入口
arbiter.py 是主进程的逻辑模块
http/ 负责对HTTP请求和相应的处理
workers/ 包含了Gunicorn支持的多种工作者进程
进入到app/目录下, 创建app.py,内容如下:
# -*- coding: utf-8 -*-
from flask import Flask, jsonify, session, request
app = Flask(__name__)
app.secret_key = 'super secret key'
@app.route('/', methods=['GET'])
def index():
return jsonify({'k': 'v'})
@app.route('/test', methods=['GET'])
def test():
num = request.args.get('num')
old = session.get('num') or None
session['num'] = num
return jsonify({'ret': old})
if __name__ == '__main__':
print 'Started'
app.run(host='0.0.0.0')
在app/目录下执行:
python wsgiapp.py app:app
即可看到相应的启动输出:
[2016-10-15 16:56:48 +0000] [10180] [INFO] Starting gunicorn 19.6.0
[2016-10-15 16:56:48 +0000] [10180] [INFO] Listening at: http://127.0.0.1:8000 (10180)
[2016-10-15 16:56:48 +0000] [10180] [INFO] Using worker: sync
[2016-10-15 16:56:48 +0000] [10185] [INFO] Booting worker with pid: 10185
或者使用pdb来跟踪代码, 使用:
python -m pdb wsgiapp.py app:app
即可深入了解Gunicorn的启动机制了。
本文来自网易实践者社区,经作者王一兵授权发布。