Gunicorn не позволяет запрашивать URL-адреса на одном экземпляре сервера - PullRequest
0 голосов
/ 12 сентября 2018

У меня странная проблема. У меня есть следующее простое / пример приложения 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

1 Ответ

0 голосов
/ 12 сентября 2018

Кажется, что это создает тупик при запуске с Gunicorn.Кажется, что он работает нормально при работе с несколькими работниками следующим образом:

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

Это, очевидно, не реальное решение, так как несколько одновременных запросов все еще могут создать тупик.Понятия не имею, почему этого не происходит, когда бегаешь без огнестрельного оружия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...