使用Python获取长期仪器数据 - 使用“While”循环和线程化进程

时间:2012-08-28 18:55:34

标签: python multithreading while-loop data-acquisition

我将通过硬线以太网LAN将4个硬件数据采集单元连接到单个控制PC。此应用程序的编码将驻留在PC上,完全基于Python。每个数据采集单元的配置相同,将以相同的方式从PC轮询。他们连接的测试盒提供我们寻求进行测试的可变输出。

这些测试是长期的(8-16个月或更好),数据采集率相对较低(每分钟少于500个样本,可能接近200个样本)。一般的流程也很简单。我将遍历每个数据采集设备并且:

  • 从设备上读取数据;
  • 对数据进行一些计算;
  • 如果计算结果说一件事,请打开加热器;
  • 如果他们说了什么,什么都不做;
  • 将数据写入磁盘和文件以供后续处理

我会等待一段时间,然后重复这个过程。以下是我的问题:

  1. 我计划使用while TRUE:循环开始执行上面列出的序列,并允许循环通过异常退出,但我欢迎任何关于我应该检查的特定异常的建议因为 - 甚至,这是最好的方法吗?另一种方法可能是这样的:一旦进入while循环,我就可以使用try: - except: - finally:构造来退出循环。
  2. 我上面概述的过程是针对主要数据采集的,但考虑到采集周期的长短,我还需要做其他事情:检查硬件单元是否正常运行,采取测试台这些“管理”功能与主循环不同,因此我希望将它们保持不同。我应该在同一个脚本中的不同线程中设置此活动,还是有更好的方法?
  3. 先谢谢,伙计们。欢迎所有反馈!

2 个答案:

答案 0 :(得分:2)

我认为使用客户端 - 服务器模型

对你有好处

它将很好地分开,因此一个脚本不会影响另一个 - 状态检查/数据收集

基本上你要做什么来运行服务器来收集主机上的数据,这可能有一些终端输入用于维护(日志记录,优雅退出等等)和数据收集PC将像客户端一样使用True循环(除非被杀死,否则可以无限运行),并且在每个数据收集PC上将是服务器/客户端(取决于观点)进行状态检查,并将数据发送到MAIN pc,您将决定做什么

如果您使用unix / linux或者甚至是windows,那么状态检查只需使用ssh到机器并检查状态(手动或通过主机上的脚本)......取决于具体需求......

享受

答案 1 :(得分:1)

您可能需要多个循环。如果仪器是TCP服务器,您可能希望在内部循环中捕获“断开连接”异常并尝试重新连接,而不是永久终止仪器线程。

不确定Python。在C ++,C#,Delphi上,我可能会通过等待生产者 - 消费者队列超时来生成等待。如果没有发布任何内容,您概述的序列将按您的意愿重复。如果需要发生其他一些偶然的事情,你可以排队一条消息,指示线程向仪器发出必要的命令,或者断开连接并设置内部'不轮询,等到指示重新连接并且再次轮询'旗帜,或任何需要做的事。

这种方法比停止线程和从其他线程连接只是为了做偶尔的事情要干净得多。使用任何语言都可以最好地避免停止/终止/重新创建线程。