如何让我的Python脚本永远运行?

时间:2013-02-02 20:15:43

标签: python

我有一个读取传感器值的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()

2 个答案:

答案 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不会自动限制脚本执行。我猜你在readadcpac Feed挂起并锁定脚本或执行中的异常时遇到了问题(但是如果从命令行执行脚本,你会看到它)。脚本是挂起还是停止并退出?

如果您可以使用print()输出一些数据并在Pi上看到它,您可以添加一些简单的调试行来查看它的挂起位置 - 您可能会或可能无法轻松修复它超时参数。另一种方法是将脚本线程化并将循环体作为线程运行,主线程充当监视程序,如果处理线程花费的时间过长,就会终止处理线程。