问题描述
我正在编写一个带有Flask后端的React应用,我希望它能够通过串行端口接收数据,处理这些数据并绘制图形。目前,我正在使用后端将某些数据(当前时间和可用端口)发送到React。我想设置一个后台Python线程,该线程将连续运行以使用pyserial从串行端口读取数据,对其进行处理并将其发送到React,但是我不确定实现此目的的最佳方法是什么。我最初的搜索将我带到Celery;但是,我不确定这是否是连续任务的好选择。任何帮助深表感谢!
解决方法
问题是从串行端口读取通常以阻塞方式进行。这意味着您不会定期轮询,而是打开端口一次,然后一直读取,等待新数据到来。
您需要的是单独的thread。这是与普通Web服务器并行运行的程序的一部分。然后,您需要某种数据库来在该线程和Web服务器之间进行通信。如果希望数据在设备和服务器重启之间保持不变,则应安装一个真实的数据库,例如Postgres。如果没有,您可以在应用程序内存中简单地使用一个数组。
在线程中,从串行端口读取并将值写入数据库/阵列。
在您的REST端点中,输出最后X个值。
然后您的客户端可以对此端点进行轮询。
(如果您确实想花点时间,可以使用更多的事件驱动方法,但是实现起来会更加复杂)