首页 > 解决方案 > 从主代码并行运行 Flask 网络服务器?

问题描述

背景:对于 Raspberry Pi,我正在开发一些家庭自动化工具。一方面,我的主要应用程序读取 CSV 文件,该文件由日期+时间条目以及 GPIO 端口号和向该端口发送信号所需的持续时间组成。我的主应用程序读取这个 CSV,创建一个小条目列表,然后基本上每 60 秒检查一次是否有任何工作要做。到目前为止一切顺利,这就像一个魅力。

现在在另一半,我正在尝试运行一个 Flask Web 服务,这样我就可以直接与这个计划交互、覆盖、推送以刷新 csv 等等。稍后(未来的音乐)我正在考虑制作一些具有与此 Web 服务对话的漂亮 GUI 的 Android 应用程序。

但我一直在努力启动网络服务,然后启动主应用程序(读取 csv;执行循环)

一些代码片段:

import threading
from flask import Flask, render_template, request
from dwe_homeautomation_app import runMainWorker
        app = Flask(__name__)
        
        # Some routing samples
        @app.route('/app/breakLoop')
        def breakLoop():
            m_worker.breakLoop = True # set global var to exit the 60 sec loop
            return "break!"
        
        if __name__ == '__main__':
            # TODO: how to run this parallel ?
            t1 = threading.Thread(target=app.run(debug=True, use_reloader=False, port=5000, host='0.0.0.0')) # Flask webserver
            t2 = threading.Thread(target=runMainWorker()) # The main app that reads the csv and executes the 60 sec loop
            t1.start()
            t2.start()

当我通过谷歌和堆栈溢出阅读一些主题时,我真的不知道如何在我的代码中使用它;我看到了一些关于多线程的建议,尽管这些信息和建议似乎彼此之间不太同步。

由于某种原因 t1 (网络服务)启动,但 t2 根本没有启动。

我对 Python 比较陌生,所以我可能在这里遗漏了明显的东西。非常感谢任何建议,指出我正确的方向,或指出我在代码示例中的错误。

标签: pythonflask

解决方案


试试看:

from flask import Flask, render_template, request
from threading import Thread
app = Flask(__name__)

    # Some routing samples
@app.route('/app/breakLoop')
def breakLoop():
    m_worker.breakLoop = True # set global var to exit the 60 sec loop
    return "break!"

def runApp():
    app.run(debug=True, use_reloader=False, port=5000, host='0.0.0.0')

if __name__ == '__main__':
    # TODO: how to run this parallel ?
    Thread(target = runApp).start()
    Thread(target = runMainWorker).start()

推荐阅读