gpt4 book ai didi

python - 调用 Flask app.run 后,我可以让 Python 代码继续执行吗?

转载 作者:行者123 更新时间:2023-12-03 15:59:43 24 4
gpt4 key购买 nike

我刚刚开始使用 Python,尽管在过去的 30 年里我一直在使用其他语言进行编程。我想让我的第一个应用程序保持简单,所以我从一个托管在 Raspberry Pi 上的小型家庭自动化项目开始。

我的代码可以正常工作(控制阀门、读取流量传感器并在显示器上显示一些数据),但是当我想添加一些网络交互时,它突然停止了。
我在这个主题上找到的大多数文章都建议使用 Flask 框架来组成动态网页。我已经尝试并理解了 Flask 的基础知识,但是一旦我调用“app.run”函数,我就无法解决 Flask 阻塞的问题。我的其余 python 代码等待 Flask 返回,这从未发生过。 IE。不再需要水流测量、阀门电机转向或显示更新。

所以,我的基本问题是:在我的应用程序主要任务(GPIO/脉冲计数)的同时,我应该使用什么工具来提供简单的动态网页(负载非常低,例如 1 个请求/周)?所有这一切都发生在 Raspberry Pi (3) 的资源受限环境中。
如果你仍然建议 Flask(因为它看起来非常接近目标),我应该如何安排我的代码来继续处理现实世界的事件,比如上面提到的?

(在没有看到实际代码的情况下,这最后一部分可能很难回答,但也许可以以“通用”方式回答它?或者指出我在搜索时可能遗漏的现有示例。)

最佳答案

你在多线程的正确轨道上。如果您的监控代码循环运行,您可以定义一个函数,如

def monitoring_loop():
while True:
# do the monitoring

然后,在您调用之前 app.run() , 启动一个运行该函数的线程:
import threading
from wherever import monitoring_loop

monitoring_thread = threading.Thread(target = monitoring_loop)
monitoring_thread.start()

# app.run() and whatever else you want to do

不要 join线程 - 您希望它与 Flask 应用程序保持并行运行。如果你加入它,它会阻塞主执行线程直到它完成,这永远不会,因为它正在运行 while True环形。

要在监控线程和程序的其余部分之间进行通信,您可以使用 queue在它们之间以线程安全的方式传递消息。

关于python - 调用 Flask app.run 后,我可以让 Python 代码继续执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com