如何在服务器上并行运行两个python Flask应用程序(项目)

时间:2019-01-09 17:29:53

标签: python flask server

我有两个不同的Flask项目。我想在不同链接的服务器上运行它们。

目前,我一次看到一个项目可以运行。

我尝试在具有不同链接以及相同端口的同一端口上运行。但是我看到它一次只运行一个项目。

项目1

if __name__ == '__main__':
   app.run(host="0.0.0.0", port=5001,debug = True)
项目二

我尝试跑步

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 :(得分:0)

我最近在Flask中对自己的网站进行了并行线程操作。因此,尽管我将尽我所能解释这件事,但我完全理解了您的困惑。

创建并行操作时,最好使用多线程。基本上,多线程是指在CPU上拆分操作并同时进行操作。尽管这必须由CPU支持,但今天大多数都支持多线程。

无论如何,都可以使用该应用程序。通过使用主线程作为内存处理程序,我初始化了Flask Application类以在所有线程之间共享数据。之后,我创建了页面。然后在初始化'if语句'(if __name__ == '__main__')中-在其他语言中称为驱动程序类。我初始化并启动线程以完成应用程序的某些部分。

注意: Flask不允许在不在主线程上时执行调试模式。基本上意味着您在调试应用程序时不能在Flask Apps上使用多线程,这没问题。 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

希望这对您有所帮助,并乐于发展!