У меня странная проблема. У меня есть следующее простое / пример приложения Flask:
# 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'
, а затем останавливается.
У меня возникла такая же проблема с uWSGI. Есть идеи?
EDIT
Я принимаю ответ ikkuh, поскольку проблема, похоже, связана с тупиком, который можно решить, создав множественные процессы. Однако то, что у меня сработало, это установка и настройка gevent
в качестве рабочего менеджера, поскольку по умолчанию sync
:
# pip install gevent
gunicorn -b 0.0.0.0:6556 -k gevent server:app