我试图建立一个温度控制模块,可以通过网络或手动控制。我的程序的各个部分都可以工作,但是我很难弄清楚如何使它们全部工作,together.also,我的温度控制模块是python,客户端是C#。
就物理元件而言,我有一个设置温度和打开和关闭加热器的键盘和一个显示温度数据的液晶屏幕,当然还有一个温度传感器。
对于我的网络内容,我需要:不断地向客户端发送温度数据。向客户端发送日志文件列表。等待客户端提示设置所需的温度或向客户端发送日志文件。
到目前为止,所有的硬件都运行良好,网络功能的每个单独部分都可以工作,但并不是一起工作。我没有尝试使用物理和网络组件。
我一直在尝试使用线程,但我想知道我是否应该使用其他的东西?
编辑:下面是我想要做的事情背后的基本逻辑:
硬件:
键盘接受一个数字输入,直到'*‘,然后它设置一个临时变量。
将温度变量与传感器数据进行比较,并相应地打开或关闭加热器。
打开加热器并将温度变量设置为0。
传感器数据被写入日志文件,而temp变量不是0。
网络:
在客户端连接时,客户端被发送一个日志文件列表。
温度传感器数据连续发送给客户端。
提示处理程序侦听提示。
如果客户端请求日志文件,则停止温度数据,并发送该文件,然后再恢复温度数据。
客户端可以向提示符处理程序发送命令,以设置temp变量以触发加热器。
客户端可以向提示符处理程序发送命令以停止加热器并将temp变量设置为0。
来自键盘或客户端的命令应该在任何时候都能工作。
发布于 2017-06-22 15:10:59
多处理通常用于当您想要利用多个处理核的计算能力时。多处理限制了如何处理程序组件之间的共享状态的选项,因为内存最初是在进程创建时复制的,而不是自动共享或更新的。线程从同一内存区域执行,并且没有此限制,但不能利用多个核来提高计算性能。您的应用程序听起来不像是需要大量的计算,而只是从并发性中获益,以便能够同时处理用户输入、网络和少量处理。我会说你需要线程而不是进程。我对异步没有足够的经验,无法将其与线程进行很好的比较。
编辑:这看起来是一个相当复杂的项目,所以不要指望它在你第一次点击"run“时会完美地运行,但是绝对是非常可行和有趣的。
这就是我如何组织这个项目..。
我在这里有效地看到了四个单独的线程(可能是用于愚蠢的小任务的小型辅助dameon线程)。
http.server只是为了原型,或者类似于websockets和一些asyncio。主要是它将与数据记录器和温度控制器线程与getter和setter交互,而不是直接修改值。tkinter应用程序来抓取按键,因为这是我所知道的。同样,使用tkinter应用程序形成一个请求,但不要直接修改值;在线程之间“交谈”时使用getter和setter。它只是保持了更好的组织性和分隔性。https://stackoverflow.com/questions/44703003
复制相似问题