从主代码并行运行Flask Web服务器?

时间:2020-06-22 17:59:00

标签: python flask

上下文: 对于Raspberry Pi,我正在开发一些家庭自动化工具。 一方面,我的主要应用程序读取一个CSV文件,该文件由带有GPIO端口号和向该端口发送信号所需的持续时间的日期和时间条目组成。 我的主应用程序会读取此CSV文件,并创建一个小的条目列表,然后基本上每60秒检查一次是否有任何工作要做。 到目前为止,效果还不错。

现在在另一半,我正在尝试运行Flask Web服务,以便我可以直接与此计划进行交互,覆盖,推送以刷新csv等。 稍后(未来的音乐),我正在考虑制作一些具有与此GUI服务相关的GUI的android应用。

但是我一直在努力启动Web服务,然后启动主应用程序(阅读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(Web服务)启动了,但t2根本没有启动。

我是Python的新手,所以我可能在这里没有明显的地方。 我们非常感谢您提供的任何建议,无论是正确的方向,还是代码示例中的错误。

2 个答案:

答案 0 :(得分:0)

尝试:

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()

答案 1 :(得分:0)

检查threading.Thread文档: https://docs.python.org/3/library/threading.html#thread-objects 您必须传递文档中没有括号和args / kwargs的目标。

相关问题