繁体   English   中英

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM