保持python日志脚本无限期运行的建议。剧本过了好几个小时就演完了

2024-10-02 16:26:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个脚本来记录太阳能逆变器的串行数据。这个脚本在windows上运行了好几个小时,但随后开始出现问题。你知道吗

脚本应该将调试数据打印到控制台,并大致每分钟将日志数据写入一个.csv文件。你知道吗

  1. 将调试数据打印到stdout可以工作数小时,但随后开始变得零星。当我将鼠标移到PowerShell控制台上并再次将其聚焦时,打印似乎恢复了。Windows是否将旧的/非活动的进程置于休眠状态?你知道吗
  2. 脚本应该大约每分钟将日志数据写入一个.csv文件,但是有时它会花费很多分钟而不更新.csv文件。 当它最终更新文件时,没有数据丢失,因此它仍然清楚地将数据记录在backround中。编辑:仔细查看.csv数据,数据中似乎存在临时中断,我假设进程正在暂停,然后稍后继续。你知道吗

我已经编程很多年了,但我对python还不熟悉。我肯定我没有犯过溢出错误或类似的错误。我不认为你会从中得到什么,但我已经把脚本的主要循环放在下面了。你知道吗

try:
    if not ser.is_open:
        print("Opening Serial")
        ser.open()

    # global inverterSettings
    inverterSettings = crc.readSettings(ser)

    qpigsColumns = dp.qpigsParamsModified.keys()
    print("qpigsColumns:\n", qpigsColumns)
    qpigsArray = pd.DataFrame([], columns=qpigsColumns)
    qpigsArray.set_index("24hDecimal", inplace=True)

    today = time.strftime(
        "%a, %d %b %Y", time.localtime()
    )  # nicely formatted date variable
    print("Sarting @ " + today)

    while 1:

        newToday = time.strftime(
            "%a, %d %b %Y", time.localtime()
        )  # checking for a new day every minute or so
        if today != newToday:
            today = newToday  # updating to new day
            qpigsArray = pd.DataFrame(
                [], columns=qpigsColumns
            )  # creating new dataFrame for new day
            qpigsArray.set_index("24hDecimal", inplace=True)
            print("\n" + today)

        # read solar data loop
        # --------------------
        print(".", end="", flush=True)

        for i in range(30):
            rawQpigsData = dp.readQPIGS(ser)
            data = pd.DataFrame([rawQpigsData], columns=qpigsColumns)
            data.set_index("24hDecimal", inplace=True)
            qpigsArray = qpigsArray.append(data, ignore_index=False)

        qpigsArray.to_csv(today + ".csv")

        # ---------

        if (rawQpigsData[-1] > 6) and (
            rawQpigsData[-1] < 18
        ):  # between 6 am and 6 pm (daylight hours)
            if (rawQpigsData[13] > PVocV / 2) and (
                rawQpigsData[15] < 10
            ):  # Panels have enough voltage, but not producing any solar power
                print("?", end="", flush=True)
                floatV = inverterSettings["userSettings"]["floatChargeV"]
                rx1 = crc.adjustFloatV(
                    (floatV - 0.1), ser
                )  # potential fix for panels not working?
                rx2 = crc.adjustFloatV((floatV + 0.1), ser)
                if rx1 == rx2 == "Ack":
                    print("?", end="", flush=True)
                else:
                    print("¿", end="", flush=True)
except Exception:
    traceback.print_exc()
finally:
    ser.close()

脚本似乎没有崩溃或抛出任何错误。所以我假设这是Windows处理长时间运行的进程时的一个错误。我计划很快把这个移到r-pi

所以一般来说,我需要一些关于如何设置python代码的建议,这样它就可以在windows和r-pi上无限期地运行,而不需要进入睡眠状态,或者几个月后崩溃。一个人通常怎么做?你知道吗


Tags: 文件csv数据脚本truetodayindexif