我有一个程序可以计算雨量计上的脉冲(霍尔效应传感器)来测量降水量。它连续运行并每5分钟计数一次脉冲,然后转化为降雨量。一小时后(12 - 5分钟测量,我添加总数,这是每小时的降雨量。我已经构建了这个程序,以便它丢弃最旧的测量并在一小时后每5分钟添加一个新的测量,所以我有一个每小时产生雨量,称为“totalrainlasthour”。
我的问题是我想使用包含其他数据(如风速,温度等)的单独程序将此数据上传到地下天气。此上传每5分钟发生一次。我想要包含“totalrainlasthour”的当前值,并在上传中使用它。
我尝试了“from import”命令但是我读的越多,看起来就不会起作用了。
from rainmodule import totalrainlasthour
print totalrainlasthour
有没有办法从单独的程序中提取变量的当前值?
答案 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,所以如果你对数据库进行了大量的更改和添加,它可能最终成为瓶颈。