我有一个读取传感器值的python脚本(如下所示)。不幸的是,它一次只运行5-60分钟,然后突然停止。有没有办法可以有效地让这个永远运行?有没有什么理由为什么像这样的python脚本无法在Raspberry Pi上永远运行,或者python是否会自动限制脚本的持续时间?
while True:
current_reading = readadc(current_sensor, SPICLK, SPIMOSI, SPIMISO, SPICS)
current_sensed = (1000.0 * (0.0252 * (current_reading - 492.0))) - correction_factor
values.append(current_sensed)
if len(values) > 40:
values.pop(0)
if reading_number > 500:
reading_number = 0
reading_number = reading_number + 1
if ( reading_number == 500 ):
actual_current = round((sum(values)/len(values)), 1)
# open up a cosm feed
pac = eeml.datastream.Cosm(API_URL, API_KEY)
#send data
pac.update([eeml.Data(0, actual_current)])
# send data to cosm
pac.put()
答案 0 :(得分:1)
好像你的循环没有延迟并且不断附加你的“值”数组,这可能会导致你在相当短的时间内耗尽内存。我建议添加一个延迟,以避免每一瞬间追加值数组。
添加延迟:
import time
while True:
current_reading = readadc(current_sensor, SPICLK, SPIMOSI, SPIMISO, SPICS)
current_sensed = (1000.0 * (0.0252 * (current_reading - 492.0))) - correction_factor
values.append(current_sensed)
if len(values) > 40:
values.pop(0)
if reading_number > 500:
reading_number = 0
reading_number = reading_number + 1
if ( reading_number == 500 ):
actual_current = round((sum(values)/len(values)), 1)
# open up a cosm feed
pac = eeml.datastream.Cosm(API_URL, API_KEY)
#send data
pac.update([eeml.Data(0, actual_current)])
# send data to cosm
pac.put()
time.sleep(1)
答案 1 :(得分:0)
理论上,这应该永远运行,Python不会自动限制脚本执行。我猜你在readadc
或pac
Feed挂起并锁定脚本或执行中的异常时遇到了问题(但是如果从命令行执行脚本,你会看到它)。脚本是挂起还是停止并退出?
如果您可以使用print()
输出一些数据并在Pi上看到它,您可以添加一些简单的调试行来查看它的挂起位置 - 您可能会或可能无法轻松修复它超时参数。另一种方法是将脚本线程化并将循环体作为线程运行,主线程充当监视程序,如果处理线程花费的时间过长,就会终止处理线程。