Python 我的项目应该使用线程多处理还是asycio?
我试图建立一个温度控制模块,可以通过网络控制或手动控制。我的程序的各个部分都可以工作,但我很难弄清楚如何让它们一起工作。另外,我的温度控制模块是python,客户端是C# 就物理元件而言,我有一个设置温度、打开和关闭加热器的键盘,还有一个显示温度数据的lcd屏幕,当然还有一个温度传感器 对于我的网络内容,我需要: 不断向客户端发送温度数据。 向客户端发送日志文件列表。 等待客户端的提示,设置所需温度或向客户端发送日志文件 到目前为止,所有硬件工作正常,网络功能的每个单独部分都可以工作,但不能一起工作。我没有尝试同时使用物理和网络组件 我一直在尝试使用线程,但不知道我是否应该使用其他东西 编辑: 以下是我想做的事情背后的基本逻辑: 硬件: 键盘接收一个数字输入,直到“*”,然后设置一个临时变量 将温度变量与传感器数据进行比较,并相应地打开或关闭加热器 “#”转动加热器并将温度变量设置为0 温度变量不为0时,传感器数据写入日志文件 网络: 客户端连接后,会向客户端发送日志文件列表 温度传感器数据连续发送至客户端 提示处理程序侦听提示 如果客户端请求日志文件,则温度数据将暂停,并发送文件,然后恢复温度数据 客户端可以向提示处理程序发送命令,以设置触发加热器的temp变量 客户端可以向提示处理程序发送命令,以停止加热器并将temp变量设置为0Python 我的项目应该使用线程多处理还是asycio?,python,multithreading,Python,Multithreading,我试图建立一个温度控制模块,可以通过网络控制或手动控制。我的程序的各个部分都可以工作,但我很难弄清楚如何让它们一起工作。另外,我的温度控制模块是python,客户端是C# 就物理元件而言,我有一个设置温度、打开和关闭加热器的键盘,还有一个显示温度数据的lcd屏幕,当然还有一个温度传感器 对于我的网络内容,我需要: 不断向客户端发送温度数据。 向客户端发送日志文件列表。 等待客户端的提示,设置所需温度或向客户端发送日志文件 到目前为止,所有硬件工作正常,网络功能的每个单独部分都可以工作,但不能一起
来自键盘或客户端的命令应始终有效。多处理通常适用于需要利用多个处理核心的计算能力的情况。多处理限制了如何处理程序组件之间共享状态的选项,因为内存最初是在进程创建时复制的,而不是自动共享或更新的。线程从相同的内存区域执行,并且没有此限制,但是不能利用多个内核来提高计算性能。您的应用程序听起来并不需要大量的计算,而只是可以从并发性中获益,从而能够同时处理用户输入、联网和少量处理。我想说你需要线程而不是进程。我对asyncio的经验不足,无法很好地将其与线程进行比较 编辑:这看起来像是一个相当复杂的项目,所以不要期望它在你第一次点击“run”时就能完美运行,但肯定是非常可行和有趣的 下面是我将如何组织这个项目 我在这里看到了四个独立的线程(可能是用于愚蠢的小任务的小辅助dameon线程)
http.server
进行原型设计,或者类似websockets
和一点asyncio
。主要的是,它将与数据记录器和温度控制器线程通过getter和setter进行交互,而不是直接修改值tkinter
应用程序来抓取按键,因为这就是我所知道的。同样,使用tkinter应用程序生成请求,但不要直接修改值;在线程之间“交谈”时使用getter和setter。它只是让事情更好地组织和划分@drako234也许您可以编写一些伪代码或绘制子系统的图表,然后我可以尝试将哪些线程分配给各种任务。这在很大程度上是一个“细节中的魔鬼”问题,因此我认为解决这个问题的一个很好的方法是绘制一个框架图,其中包含所有需要工作的各个组件together@drako234我添加了一些更具体的实施建议。。您肯定可以在第一次迭代中减少一些复杂性,以使其更易于管理(我将首先简化您的日志记录情况)。保持独立线程如此隔离(使用getter和setter)的部分好处是,修改单个组件更容易,而不会影响其他组件。