如何使用gunicorn的服务器钩子中创建的变量?

时间:2016-12-03 19:53:42

标签: python flask gunicorn

我正在使用gunicorn来运行我的Flask应用程序。我想在应用程序启动时和关闭之前注册服务器挂钩以执行某些操作,但我对如何将变量传递给这些函数以及如何提取在其中创建的变量感到困惑。

在gunicorn.conf.py中:

bind = "0.0.0.0:8000"
workers = 2
loglevel = "info"
preload = True

def on_starting(server):
    # register some variables here
    print "Starting Flask application"

def on_exit(server):
    # perform some clean up tasks here using variables from the application
    print "Shutting down Flask application"

在app.py中,示例Flask应用程序:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/hello', methods=['POST'])
def hello_world():
      return jsonify(message='Hello World')

if __name__ == '__main__':
   app.run(host='0.0.0.0', port=9000, debug=False)

像这样运行枪炮:$ gunicorn -c gunicorn.conf.py app:app

3 个答案:

答案 0 :(得分:0)

由于wsgi接口以及请求之间管理状态的方式,您无法实现的目标是什么。

答案 1 :(得分:0)

将您需要传递的数据传递给环境变量。

您还可以将要传递的数据存储到挂钩中,也可以存储在文件中。

答案 2 :(得分:0)

有点晚,但是您可以通过server.app.wsgi()访问flask应用程序实例。它返回工作人员使用的相同实例(flask.current_app也返回该实例)。

def on_exit(server):
    flask_app = server.app.wsgi()
    # do whatever with the flask app