【问题标题】:FIFO buffer in pythonpython中的FIFO缓冲区
【发布时间】:2021-03-22 02:08:42
【问题描述】:

我正在尝试从传感器获取信号并使用 Raspberry 和 Python “实时”处理它。我使用 ADC 转换器进行数字输入。我被告知要实现一种缓冲区,因为时间处理需要太多时间并且会停止 ADC 采集。我的方案是:

  1. 采集线程:ADC 输出样本在选择 采样率并将它们放入环形缓冲区(Python 中的队列)
  2. 处理线程:当缓冲区已满时从缓冲区中提取样本并在一个块中处理

我的问题是:如何将保存在缓冲区中的 ADC 数据全部发送到处理代码?我读过分块处理更方便,但我不知道该怎么做。我想使用 threds 因为我不想丢失样本

【问题讨论】:

    标签: python-3.x buffer signal-processing raspberry-pi4 adc


    【解决方案1】:

    虽然可以在 Python 中创建多个线程,但我很遗憾地说(标准 CPython)解释器在实际同时执行这些线程方面的能力有限。问题的症结在于解释器不是线程安全的,所以线程必须持有“全局解释器锁”或“GIL”才能安全访问 Python 对象:"only the thread that has acquired the GIL may operate on Python objects or call Python/C API functions."

    另请参阅这些相关帖子:

    如果可能,我会考虑在这个项目中使用 Java 或 C++ 或其他更支持多线程的语言。

    如何将保存在缓冲区中的 ADC 数据全部发送到处理代码?

    (如果您仍想使用 Python)可以将 ADC 数据作为 a listnumpy array 传递给处理代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2016-08-30
      相关资源
      最近更新 更多