Как запустить два приложения Python Flask (проект) на сервере параллельно - PullRequest
0 голосов
/ 09 января 2019

У меня есть два разных проекта Flask. Я хочу запустить их на сервере по другой ссылке.

В настоящее время я видел, как работает один проект.

Я пробовал работать на одном и том же порту с другой ссылкой, а также с другим портом. Но я вижу, что он запускает только один проект за раз.

Проект 1

if __name__ == '__main__':
   app.run(host="0.0.0.0", port=5001,debug = True)
Проект 2

Я пытался запустить

export FLASK_APP=app.py
flask run --host 0.0.0.0 --port 5000
Тоже так
if __name__ == '__main__':
        app.run(host="0.0.0.0", port="5000",debug = True)

1 Ответ

0 голосов
/ 09 января 2019

Недавно я выполнил параллельную операцию с моим собственным веб-сайтом во Flask. Поэтому я полностью понимаю ваше замешательство, хотя я собираюсь объяснить это наилучшим из моих способностей.

При создании параллельных операций лучше всего использовать многопоточность. В основном многопоточность предназначена для разделения операций и одновременного выполнения их на процессоре. Хотя это должно поддерживаться процессором, который на сегодняшний день поддерживает многопоточность.

В любом случае, с приложением. Я инициализировал классы приложений Flask для обмена данными между всеми потоками, используя основной поток в качестве обработчика памяти. После этого я создал страницы. Затем в инициализации 'if Statement' (if __name__ == '__main__') - известный как класс драйвера на других языках. Я инициализировал и начал потоки, чтобы сделать там части приложения.

Примечания: Flask не позволяет запускать режим отладки, не находясь в основном потоке. В основном это означает, что вы не можете использовать многопоточность в приложениях Flask при отладке приложения, и это не проблема. VSCode имеет отличную консоль вывода, чтобы дать мне достаточно информации, чтобы выяснить проблемы в приложении. Хотя ... иногда обнаружение ошибок потока может быть .. иногда болезненным, но лучше всего следить за вашими действиями при отладке.

Другое дело, что вы все еще можете использовать резьбовую функцию во Flask. Который я люблю использовать в любом приложении Flask, которое я делаю, потому что оно обеспечивает лучшее соединение для клиентов. Например, поток отключен; клиент подключается и поддерживает основной поток, который удерживает его в течение миллисекунды, а затем освобождает его. Включив резьбу; позволяет клиентам открывать и отпускать несколько запросов. Вместо того, чтобы все клиенты проходили через один поток.

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

Мой код для вашей проблемы:

import threading
from flask import Flask

# My typical setup for a Flask App.
# ./media is a folder that holds my JS, Imgs, CSS, etc.
app1 = Flask(__name__, static_folder='./media')
app2 = Flask(__name__, static_folder='./media')

@app1.route('/')
def index1():
    return 'Hello World 1'

@app2.route('/')
def index2():
    return 'Hello World 2'

# With Multi-Threading Apps, YOU CANNOT USE DEBUG!
# Though you can sub-thread.
def runFlaskApp1():
    app1.run(host='127.0.0.1', port=5000, debug=False, threaded=True)

def runFlaskApp2():
    app2.run(host='127.0.0.1', port=5001, debug=False, threaded=True)


if __name__ == '__main__':
    # Executing the Threads seperatly.
    t1 = threading.Thread(target=runFlaskApp1)
    t2 = threading.Thread(target=runFlaskApp2)
    t1.start()
    t2.start()

PS: Запустите это приложение, выполнив python app.py вместо export FLASK_APP=app.py flask run --host 0.0.0.0 --port 5000

Надеюсь, что это поможет вам и счастливого развития!

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