如何导入雨数据以便上传到Wunderground

时间:2013-10-05 16:10:30

标签: python import

我有一个程序可以计算雨量计上的脉冲(霍尔效应传感器)来测量降水量。它连续运行并每5分钟计数一次脉冲,然后转化为降雨量。一小时后(12 - 5分钟测量,我添加总数,这是每小时的降雨量。我已经构建了这个程序,以便它丢弃最旧的测量并在一小时后每5分钟添加一个新的测量,所以我有一个每小时产生雨量,称为“totalrainlasthour”。

我的问题是我想使用包含其他数据(如风速,温度等)的单独程序将此数据上传到地下天气。此上传每5分钟发生一次。我想要包含“totalrainlasthour”的当前值,并在上传中使用它。

我尝试了“from import”命令但是我读的越多,看起来就不会起作用了。

from rainmodule import totalrainlasthour
print totalrainlasthour

有没有办法从单独的程序中提取变量的当前值?

1 个答案:

答案 0 :(得分:0)

据我所知,对于刚开始从已经运行的Python实例中访问值的python脚本没有好办法。但是,您可以尝试一些解决方法。

如果你的天气上传脚本不断运行是可以接受的,你可以将它构造成如下所示:

import time

import rainmodule
import windmodule
# etc

def start():
    # instantiate classes so you can keep track of state
    rain = rainmodule.RainCollection()
    wind = windmodule.WindCollection()
    # etc

    prev_time = time.time()

    while True:
        rain.loop()
        wind.loop()
        # etc


        now = time.time()
        if now - prev_time > (60*60*5):
            prev_time = now

            totalrainlasthour = rain.totalrainlasthour
            winddata = wind.data
            # upload code here

if __name__ == '__main__':
    start()

此方法假定您的每个数据收集模块都可以修改为在“主”while循环内迭代运行。

如果你不能纠缠你的代码以适应这种格式,(或某些模块的loop方法需要很长时间才能执行)那么你可以使用{启动每个模块作为一个进程{3}}或multiprocessing模块,并使用某些同步数据结构或队列进行通信。


另一种解决方案可能是创建某种类型的数据库(Python与threading捆绑在一起,可以工作),并让每个脚本都写入该数据库。这样,任何任意脚本都可以运行并从数据库中获取所需内容,而无需绑定到其他数据收集模块。

使用sqlite的唯一潜在问题是,因为它是轻量级的,所以它一次只支持sqlite,所以如果你对数据库进行了大量的更改和添加,它可能最终成为瓶颈。