【发布时间】:2016-08-01 18:34:59
【问题描述】:
我有两个 IC 可以转换连接到 Raspberry Pi 的传感器信号:
- IC1 每 2 秒以串行电报的形式发送他的数据。
- IC2 是一个 ADC,它在接收到某个控制信号后发送它的数据。
我已经编写了单独的代码,可以让我从串行电报中提取测量值以及请求和接收 ADC 值,它们都可以自己正常工作。但是,它们阻止了我的主程序,我想同时获得传感器值。此外,在串行电报之间等待时,我想不断对 ADC 的输出求和,当收到电报时,应该计算模拟数据的平均值。
目前,我的平均值计算是这样执行的:
class ADC():
# [...]
def startAvg(self):
self._recording = 1
interrupt = threading.Thread(target=self.stopAvg())
recording = threading.Thread(target=self._record())
recording.start()
interrupt.start()
return self._avgs
def _record(self):
sum1 = 0
sum2 = 0
counts = 0
while self.recording:
sum1 += ADC[0] # ADC channel 0
sum2 += ADC[1] # ADC channel 1
counts += 1
self._avgs = [ sum1 / counts, sum2 / counts ]
def stopAvg(self):
time.sleep(1)
self._recording = 0
我创建了一个只是休眠的虚拟函数 (stopAvg) 来模拟串行电报的到来。稍后,应该在我的主程序中从课外停止平均。然而,即使是现在,_record() 也只是在 stopAvg() 完成后调用。我的错在哪里?我已经阅读了一些关于线程的教程,但我不知道如何将它应用于我的问题,尤其是平均。我知道它可以简单地让我的任务一个接一个地完成,但我想获得平均值,以便处理我的信号峰值。毕竟线程是正确的解决方案吗?
我认为我只需要关于如何构建线程的好建议,因为我以前从未使用过线程。
【问题讨论】:
标签: python multithreading python-2.7