【问题标题】:How to approach this multithreading task, problems with logical structure如何处理这个多线程任务,逻辑结构问题
【发布时间】: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


    【解决方案1】:

    我发现了我的错误:

    interrupt = threading.Thread(target=self.stopAvg())
    recording = threading.Thread(target=self._record())
    

    目标参数中的括号不属于那里!

    interrupt = threading.Thread(target=self.stopAvg)
    recording = threading.Thread(target=self._record)
    

    ...应该是这样的。

    【讨论】:

      猜你喜欢
      • 2022-12-14
      • 2021-07-05
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多