首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在我的项目中使用线程、多进程还是asycio?

我应该在我的项目中使用线程、多进程还是asycio?
EN

Stack Overflow用户
提问于 2017-06-22 14:59:24
回答 1查看 55关注 0票数 1

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

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

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

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

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

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

硬件:

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

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

打开加热器并将温度变量设置为0。

传感器数据被写入日志文件,而temp变量不是0。

网络:

在客户端连接时,客户端被发送一个日志文件列表。

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

提示处理程序侦听提示。

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

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

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

来自键盘或客户端的命令应该在任何时候都能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-22 15:10:59

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

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

这就是我如何组织这个项目..。

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

  1. 我会有一个线程作为您的温度控制器(PID控制/任何其他),只有控制加热器的输出。(其他线程可以请求更改设置点/控制模式(占空比/ PID))
  2. 我将有一个主线程(有几个dameon线程)来处理数据日志记录:主头侦听日志记录命令(暂停、恢复、获取等)。用于轮询温度计、旋转日志文件等的达蒙线程。
  3. 我不太熟悉网络,这将是您的客户端应用程序特有的,但我可能会开始使用http.server只是为了原型,或者类似于websockets和一些asyncio。主要是它将与数据记录器和温度控制器线程与getter和setter交互,而不是直接修改值。
  4. 最后,对于键盘输入,我可能只是组成一个快速的tkinter应用程序来抓取按键,因为这是我所知道的。同样,使用tkinter应用程序形成一个请求,但不要直接修改值;在线程之间“交谈”时使用getter和setter。它只是保持了更好的组织性和分隔性。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44703003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档