为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容3067478 2021-06-09 17:41:19
我遇到了一个奇怪的问题。我有以下简单/示例 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 的情况下运行时不会发生这种情况。


查看完整回答
反对 回复 2021-06-16
  • 1 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号