[英]How can I make my Python script run forever?
我有一个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()
看起来好像你的循环没有延迟并且不断附加你的“值”数组,这可能会导致你在相当短的时间内耗尽内存。 我建议添加一个延迟,以避免每一瞬间附加值数组。
添加延迟:
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)
理论上,这应该永远运行,Python不会自动限制脚本执行。 我猜你在readadc
或pac
feed挂起并锁定脚本或执行中的异常时遇到了问题(但是你应该看到,如果从命令行执行脚本)。 脚本是挂起还是停止并退出?
如果你可以使用print()
输出一些数据并在Pi上看到它,你可以添加一些简单的调试行来查看它挂起的位置 - 你可能会或者可能无法使用超时参数轻松修复它。 另一种方法是将脚本线程化并将循环体作为线程运行,主线程充当监视程序,如果它们花费太长时间来处理它们,则终止处理线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.