0

我正在使用 3g 网络将一堆传感器读数从我的 raspberrypi 发送到托管的 php+mysql 数据库。

为了节省带宽和能源,建议不要每秒上传传感器读数,而应该只定期上传,即每 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)

现在 fun 每 5*3600*1000 调用一次。有趣的是,我上传了有效载荷并重置了有效载荷内容以进行下一轮数据收集:

>>> r = requests.post(url, data=json.dumps(payload))

问题:

  • 在从主线程收集数据时,从乐趣中重置变量有效负载的内容是一种好习惯吗?

  • 有没有更好的方法来做到这一点?

4

1 回答 1

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')
于 2013-02-24T19:03:05.540 回答