0

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

我的问题是我想使用一个单独的程序将这些数据上传到地下天气,该程序包括风速、温度等其他数据。此上传每 5 分钟进行一次。我想包含“totalrainlasthour”的当前值,并在上传中使用它。

我尝试了一个“从导入”命令,但我读的越多,它看起来就不起作用。

from rainmodule import totalrainlasthour
print totalrainlasthour

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

4

1 回答 1

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某些模块的方法需要很长时间才能执行),那么您可以使用多处理线程模块将每个模块作为进程启动,并使用一些进行通信同步数据结构或队列。


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

使用 sqlite 的唯一潜在问题是,由于它是轻量级的,它一次只支持一个写入器,因此如果您对数据库进行大量更改和添加,它最终可能会成为瓶颈。

于 2013-10-05T16:36:45.670 回答