我遇到了一个奇怪的问题。我有以下简单/示例 Flask 应用程序:# from __future__ import print_functionimport requestsfrom flask import FlaskPORT = 6556app = 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同一个 Flask 应用程序 ( http://localhost:6556/fake_api) 的另一个 url 进行路由调用。非常平庸,如果我只是用python server.py.问题是,当我尝试像这样用 gunicorn 运行服务器时gunicorn -b 0.0.0.0:6556 server:app应用程序无限期挂在请求上。实际上它打印'INDEX CALLING API'然后停止。我在 uWSGI 上遇到了同样的问题。任何想法?编辑我接受 ikkuh 的回答,因为该问题似乎与通过产生多个进程可解决的死锁有关。然而,对我有用的是安装和设置gevent为工人经理,因为默认是sync:# pip install geventgunicorn -b 0.0.0.0:6556 -k gevent server:app
1 回答

MM们
TA贡献1886条经验 获得超2个赞
使用 gunicorn 运行时似乎会造成僵局。与多个工作人员一起运行时,它似乎运行良好,如下所示:
gunicorn -b 0.0.0.0:6556 --workers=2 server_test:app
这显然不是真正的解决方案,因为多个并发请求仍然可能造成死锁。我不知道为什么在没有 gunicorn 的情况下运行时不会发生这种情况。
添加回答
举报
0/150
提交
取消