Python 安排定期上传,好的做法?

Python 安排定期上传,好的做法?,python,Python,我使用3g网络将raspberrypi中的一组传感器读数发送到托管的php+mysql数据库 为了节省带宽和能源,我建议不要每秒上传传感器读数,而应该定期上传,比如说每5分钟上传一次。因此,我决定使用JSON格式收集读数,以简化上传后处理过程: >>> import json >>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'} 我还使

我使用3g网络将raspberrypi中的一组传感器读数发送到托管的php+mysql数据库

为了节省带宽和能源,我建议不要每秒上传传感器读数,而应该定期上传,比如说每5分钟上传一次。因此,我决定使用JSON格式收集读数,以简化上传后处理过程:

>>> 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从主线程收集数据时,重置变量有效负载的内容是否是一种良好的做法

  • 有更好的方法吗


您应该组织程序,对从传感器到数据库的数据流进行建模。因此,您将有一个以轮询速率调用采样方法的计时器。将采样方法的结果传递给缓冲方法。填充缓冲区,直到缓冲期结束。最后,每次缓冲区填满时,都要对其进行post

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')
随机导入
导入时间
def生成_样本():
尽管如此:
输入('按ENTER键模拟下一个样本…')
随机产量
def时段(时段开始、时段持续时间):
重现期\开始+期间\持续时间<时间.时间()
def收集缓冲区(样本、缓冲期):
buffer\u time=time.time()
缓冲区_样本=[]
对于样品中的样品:
缓冲区\u samples.append(示例)
如果已过周期(缓冲时间,缓冲周期):
产生缓冲液样品
缓冲区_样本=[]
buffer\u time=time.time()
def post_缓冲区(缓冲区、url):
对于缓冲区中的b:
requests.post(url,data=json.dumps(缓冲区))
post_缓冲区(收集_缓冲区(生成_样本(),300),'http://localhost:3000')

谢谢,我仍然看不到如何解决在缓冲区同时填充数据时发布缓冲区的问题。另一个注意事项是,采样率并不一致,它取决于感测对象的可用性。您必须根据您的需要制定发布缓冲区的条件。我添加了示例代码来说明实现从示例生成到发布缓冲区的管道的一种方法。