代码之家  ›  专栏  ›  技术社区  ›  pistacchio

Gunicorn不允许在同一个服务器实例上请求url

  •  0
  • pistacchio  · 技术社区  · 6 年前

    我遇到了一个奇怪的问题。我有以下简单/样品瓶应用程序:

    # from __future__ import print_function
    import requests
    
    from flask import Flask
    
    PORT = 6556
    app = Flask(__name__)
    
    
    @app.route('/')
    def index():
        j = {'data': 1}
    
        print('INDEX CALLING API')
        response = requests.post('http://localhost:{}/fake_api'.format(PORT), json=j)
        print('INDEX CALLED API')
    
        return response.text
    
    @app.route('/fake_api', methods=['POST'])
    def fake_api():
        print('FAKE_API CALL RECEIVED')
        return 'Ok, it works'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=PORT, debug=True)
    

    基本上,我模拟的是调用一个url( http://localhost:6556/ )和我一起打电话 requests 同一个应用程序的另一个url( http://localhost:6556/fake_api ). 非常平庸,如果我只是用 python server.py .

    问题是当我试图用gunicorn运行服务器时

    gunicorn -b 0.0.0.0:6556 server:app
    

    'INDEX CALLING API' 然后停了下来。

    编辑

    gevent 因为默认值是 sync :

    # pip install gevent
    gunicorn -b 0.0.0.0:6556 -k gevent server:app
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   ikkuh    6 年前

    在使用gunicorn运行时,似乎会造成死锁。与多个工人一起运行时,似乎运行良好,如下所示:

    gunicorn -b 0.0.0.0:6556 --workers=2 server_test:app