gpt4 book ai didi

python - 我应该在我的项目中使用线程多处理还是异步?

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:38 24 4
gpt4 key购买 nike

我正在尝试构建一个可以通过网络或手动控制进行控制的温度控制模块。我的程序的各个部分都可以工作,但我无法弄清楚如何使它们一起工作。而且我的温度控制模块是 python,客户端是 C#。

就物理组件而言,我有一个用于设置温度并打开和关闭加热器的键盘,以及一个显示温度数据的液晶屏,当然还有温度传感器。

对于我的网络内容,我需要:不断向客户端发送温度数据。将日志文件列表发送到客户端。等待客户端提示设置所需温度或将日志文件发送到客户端。

到目前为止,所有硬件都工作正常,网络功能的每个单独部分都可以工作,但不能一起工作。我没有尝试过同时使用物理和网络组件。

我一直在尝试为此使用线程,但想知道我是否应该使用其他东西?

编辑:这是我想做的事情背后的基本逻辑:

硬件:

键盘接受数字输入,直到“*”,然后设置一个临时变量。

将温度变量与传感器数据进行比较,并相应地打开或关闭加热器。

“#”关闭加热器并将温度变量设置为 0。

当临时变量不为 0 时,传感器数据写入日志文件

网络:

客户端连接后,会向客户端发送日志文件列表

温度传感器数据持续发送至客户端。

提示处理程序监听提示。

如果客户端请求日志文件,则温度数据将停止并发送文件,然后恢复温度数据。

客户端可以向提示处理程序发送命令来设置临时变量以触发加热器

客户端可以向提示处理程序发送命令以停止加热器并将温度变量设置为 0

来自键盘或客户端的命令应该始终有效。

最佳答案

多处理通常适用于您想要利用多个处理核心的计算能力的情况。多处理限制了您如何处理程序组件之间共享状态的选项,因为内存最初是在进程创建时复制的,但不会自动共享或更新。线程从同一内存区域执行,没有此限制,但无法利用多核来提高计算性能。您的应用程序听起来并不需要大量计算,并且只需从并发性中受益即可同时处理用户输入、网络和少量处理。我想说你需要线程而不是进程。我对 asyncio 的经验不够,无法将其与线程进行很好的比较。

编辑:这看起来是一个相当复杂的项目,所以不要指望它在你第一次点击“运行”时就完美地进行,但绝对非常可行和有趣。

这是我如何构建这个项目......

我在这里实际上看到了四个独立的线程(可能是用于愚蠢的小任务的小型辅助守护进程线程)

  1. 我将有一个线程充当温度 Controller (PID 控制/其他),它可以单独控制加热器输出。 (其他线程可以请求更改设定值/控制模式(占空比/PID))

  2. 我将有一个主线程(带有一些守护线程)来处理数据记录:主线程监听日志记录命令(暂停、恢复、获取等)守护线程来轮询温度计、旋转日志文件等等。

  3. 我对网络不太熟悉,这将特定于您的客户端应用程序,但我可能会开始使用 http.server 只是为了原型(prototype)设计,或者可能是 websockets 和一点 asyncio。最主要的是,它会通过 getter 和 setter 与数据记录器和温度 Controller 线程交互,而不是直接修改值

  4. 最后,对于键盘输入,我可能会编写一个快速的 tkinter 应用程序来捕获按键,因为这就是我所知道的。再次,使用 tkinter 应用程序形成请求,但不要直接修改值;在线程之间“交谈”时使用 getter 和 setter。它只是让事情更好地组织和划分。

关于python - 我应该在我的项目中使用线程多处理还是异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44703003/

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