【问题标题】:How do I run two python Flask application(project) on server in parallel如何在服务器上并行运行两个 python Flask 应用程序(项目)
【发布时间】:2019-01-09 17:29:53
【问题描述】:

我有两个不同的 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)

【问题讨论】:

  • 为什么它们是两个独立的项目?
  • 一个是文本分类,另一个是图像分类。两者都使用不同的数据、库和概念。所以把它分开没有意义吗? @DanielRoseman 感谢您的回复

标签: python flask server


【解决方案1】:

我最近在 Flask 中对自己的网站进行了并行线程操作。所以我完全理解你的困惑,尽管我将尽我所能解释这一点。

创建并行操作时,最好使用多线程。基本上,多线程用于拆分操作并在 CPU 上同时执行它们。尽管这必须得到 CPU 的支持,现在大多数 CPU 都支持多线程。

无论如何,与应用程序。我通过使用主线程作为内存处理程序初始化了 Flask 应用程序类以在所有线程之间共享数据。之后,我创建了页面。然后在初始化'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

希望这对您有所帮助,祝您发展愉快!

【讨论】:

  • 感谢您的详细解答。其实我的 app1 和 app2 是独立的程序。想想我有两个不同的项目要演示,并将它们托管在我的服务器上。你认为上面的代码会帮助我吗?
  • @nlpker 我不太明白,您是否试图在两个不同的进程中运行两个应用程序并在它们之间共享相似的数据?因为,当谈到我上面提供的多线程方法时,可能是一种更简单、更快捷的方法。但从长远来看,管理起来要困难得多。但是,如果您选择按进程而不是按线程分隔它。那么你最好在客户端之间进行 SQL 或 Json 请求。例如:app1 是主要用户网站,app2 是您网站的 api - 这将使用 Json 请求..
  • 这太棒了!多谢你们!我认为这将非常有用!这就是为什么我喜欢堆栈溢出! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2018-03-18
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多