上下文: 对于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的新手,所以我可能在这里没有明显的地方。 我们非常感谢您提供的任何建议,无论是正确的方向,还是代码示例中的错误。
答案 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的目标。