python - 从主代码并行运行 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 比较陌生,所以我可能在这里遗漏了明显的东西。非常感谢任何建议,指出我正确的方向,或指出我在代码示例中的错误。
解决方案
试试看:
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()
推荐阅读
- r - 使用“{”大括号获取 dplyr 中展开列的名称
- javascript - 为什么开发者会发现 ES6 的新特性语法糖?
- checkbox - 复选框列表未更新
- javascript - 限制 main.bundle.js 在 Angular 4 应用程序中直接从浏览器访问
- symfony - 注销时未删除 Symfony 4 会话 cookie
- angular6 - Angular 6:Validators.pattern 无法正常工作
- node.js - Socket.io 中 pingInterval 和 pingTimeout 的最小值
- ios - IOS App在Iphone上崩溃
- javascript - 使用 Express 和 Node.js 的 Google Maps API
- php - Wordpress Elementor 自定义 PHP 代码片段