Подключение к серверу Flask с разных устройств в сети приводит к тайм-ауту

В настоящее время я изучаю Flask и решил попробовать подключиться к очень простому серверу с других устройств в моей сети. Я последовал совету, данному в Flask - настроить сервер разработки так, чтобы он был виден в сети, и изменить

app.run()

to

app.run(host='0.0.0.0')

Однако это работает неправильно.

У меня есть настройка сервера Flask следующим образом:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hey there'

if __name__ == '__main__':
   app.run(host='0.0.0.0')

Когда я запускаю сервер, это вывод:

Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Сервер работает нормально, когда я подключаюсь через локальный хост, однако я всегда получаю тайм-аут, когда пытаюсь подключиться с другого устройства в той же сети, используя:

http://<my_ip_address>:5000 

Я пытался подключиться к серверу (который работает на моем Macbook Air) как с моего рабочего стола Windows 7, так и с моего iPhone, и оба они получали тайм-ауты.

Любая помощь по этому вопросу будет принята с благодарностью.


person user2908493    schedule 17.05.2016    source источник
comment
возможно, вам нужно настроить брандмауэр или включить переадресацию портов на вашем маршрутизаторе...   -  person Filipe Amaral    schedule 17.05.2016
comment
Вы подключаетесь к IP локальной сети? то есть 192.168... 172... 10...??? Я вижу, что вы пропустили это из вопроса, что заставляет меня думать, что вы используете внешний IP-адрес маршрутизатора.   -  person Joe Doherty    schedule 17.05.2016
comment
Я настроил свой брандмауэр на своем Mac, чтобы разрешить подключения к порту 5000. Я еще не пробовал переадресацию портов. Я подключаюсь, используя 192.168.x.x, используя IP-адрес рядом с inet при запуске ifconfig   -  person user2908493    schedule 17.05.2016
comment
что-нибудь еще работает на этом порту? Попробуйте изменить порт, установив app.run(host='0.0.0.0', port=8082)   -  person Busturdust    schedule 18.05.2016
comment
мой обходной путь был app.run(host='my_ip_addr',port=5000)   -  person shivsn    schedule 18.05.2016
comment
Сервер разработки может обрабатывать только одного клиента за раз.   -  person pjcunningham    schedule 18.05.2016


Ответы (1)


Чтобы обрабатывать запросы одновременно, вы можете запустить Flask с помощью:

app.run(threaded=True)

По умолчанию Flask работает с одним потоком, поэтому последующие запросы блокируются до тех пор, пока поток не станет доступным. В рабочей среде вам понадобится контейнер WSGI, такой как Gunicorn, для управления рабочими процессами и потоками.

person brennan    schedule 14.04.2017
comment
у меня не работает - person Ganesan J; 23.12.2020