我应该在我的项目中使用线程多处理还是asycio?

2024-05-20 09:10:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一个温度控制模块,可以通过网络控制或手动控制。我的程序的各个部分都可以工作,但是我很难弄清楚如何让它们一起工作。另外,我的温度控制模块是python,客户机是C#

至于物理元件去我有一个键盘,设置一个温度,打开和关闭加热器和一个液晶显示屏,显示温度数据,当然还有一个温度传感器

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

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

我一直试图使用线程,但不知道我是否应该使用其他东西

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

硬件:

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

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

'#'转动加热器并将温度变量设置为0

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

网络:

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

温度传感器数据连续发送到客户端

提示处理程序侦听提示

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

客户端可以向提示处理程序发送一个命令,以设置触发加热器的temp变量

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

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


Tags: 模块文件数据命令网络处理程序客户端列表
1条回答
网友
1楼 · 发布于 2024-05-20 09:10:17

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

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

下面是我将如何组织这个项目

我在这里看到了四个独立的线程(可能是用于愚蠢的小任务的小辅助dameon线程)

  1. 我会有一个线程作为您的温度控制器(PID控制/任何)有加热器输出的唯一控制(其他线程请求更改设定点/控制模式(占空比/PID))

  2. 我将有一个主线程(带有几个dameon线程)来处理数据记录:main thead侦听记录命令(pause、resume、get等)dameon线程来轮询温度计、旋转日志文件等

  3. 我不太熟悉网络,这将是特定于您的客户机应用程序的,但我可能会从http.server开始只是为了原型,或者像websockets和一点asyncio之类的东西。主要的是它将与数据记录器和温度控制器线程通过getter和setter进行交互,而不是直接修改值

  4. 最后,对于键盘输入,我可能只需要编写一个快速的tkinter应用程序来抓取按键,因为这就是我所知道的。同样,使用tkinter应用程序生成请求,但不要直接修改值;在线程之间“交谈”时使用getter和setter。它只是让事情更有条理和条块分割

相关问题 更多 >