我正在编写一个嵌入式应用程序,它从一组传感器读取数据并上传到中央服务器。该应用程序是用Python编写的,可以在Rasberry Pi单元上运行。
需要每1分钟收集一次数据,但是,互联网连接不稳定,我需要在没有连接时将数据缓冲到非易失性存储(SD卡)等。缓冲数据应在连接回来时上传。
目前,我正在考虑将缓冲数据存储在SQLite数据库中,并编写一个可以连续读取数据库并上传的cron作业。
是否有可用于此功能的python模块?
答案 0 :(得分:0)
如果您指的是使用SQLite数据库的模块,请查看SQLAlchemy。
如果你的意思是一个可以做cron所做的模块,请查看sched,一个python事件调度程序。
然而,这看起来是实现任务队列的理想场所 - 使用专用任务代理(rabbitmq,redis,zeromq,..)或python' threads和{{3} }。通常,您希望提交上载任务,工作线程将提取并执行,而任务代理处理重试和失败。所有这些都是异步发生的,不会阻止您的主应用程序。
UPD:只是为了澄清,如果您使用任务代理,则不需要数据库,因为任务代理会为您存储任务。
答案 1 :(得分:0)
是否有可用于此功能的python模块?
我不知道任何现成的模块,但是构建一个模块应该非常简单。鉴于您的要求:
互联网连接不稳定,我需要在没有连接时将数据缓冲到非易失性存储(SD卡)等。缓冲数据应在连接回来时上传。
该算法看起来像这样(伪代码):
echo 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
关键是分离缓冲和上传问题。即当从传感器读取数据时不要尝试立即上传,始终从预定模块上传。这使两个模块保持简单和稳定。
然而,您需要关注一些边缘情况,以确保可靠地工作:
要解决此问题,您可能需要考虑另一个数据库,或为每批上传创建多个SQLite数据库甚至平面文件。
答案 2 :(得分:-1)