我遇到了一個奇怪的問題。我有以下簡單/示例 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 的回答,因為該問題似乎與通過產(chǎn)生多個進程可解決的死鎖有關。然而,對我有用的是安裝和設置gevent為工人經(jīng)理,因為默認是sync:# pip install geventgunicorn -b 0.0.0.0:6556 -k gevent server:app
1 回答

MM們
TA貢獻1886條經(jīng)驗 獲得超2個贊
使用 gunicorn 運行時似乎會造成僵局。與多個工作人員一起運行時,它似乎運行良好,如下所示:
gunicorn -b 0.0.0.0:6556 --workers=2 server_test:app
這顯然不是真正的解決方案,因為多個并發(fā)請求仍然可能造成死鎖。我不知道為什么在沒有 gunicorn 的情況下運行時不會發(fā)生這種情況。
添加回答
舉報
0/150
提交
取消