我正在使用3g网络从我的raspberrypi向托管的php + mysql数据库发送一堆传感器读数。
为了节省带宽和能量,它was recommended而不是每秒上传传感器读数,我应该只定期上传,即每5分钟上传一次。所以我决定使用JSON格式收集读数以简化上传POST过程:
>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
我还使用timer2模块设置了一个计时器:
>>> timer2.apply_interval(msecs, fun, args, kwargs, priority=0)
现在每5 * 3600 * 1000就会调用一次。有趣的是,我上传了有效负载并重置了下一轮数据收集的有效负载内容:
>>> r = requests.post(url, data=json.dumps(payload))
问题:
在从主线程收集数据时,从fun开始重置变量有效负载的内容是不错的做法?
有更好的方法吗?
答案 0 :(得分:0)
您应该组织程序来模拟从传感器到数据库的数据流。因此,您将拥有一个以轮询速率调用采样方法的计时器。将采样方法的结果传递给缓冲方法。填充缓冲区,直到缓冲期结束。最后,每当它填满时发布缓冲区。
import random
import time
def generate_samples():
while True:
input('Press ENTER to simulate next sample...')
yield random.random()
def period_elapsed(period_start, period_duration):
return period_start + period_duration < time.time()
def collect_buffers(samples, buffer_period):
buffer_time = time.time()
buffer_samples = []
for sample in samples:
buffer_samples.append(sample)
if period_elapsed(buffer_time, buffer_period):
yield buffer_samples
buffer_samples = []
buffer_time = time.time()
def post_buffers(buffers, url):
for b in buffers:
requests.post(url, data=json.dumps(buffer))
post_buffers(collect_buffers(generate_samples(), 300), 'http://localhost:3000')