python - 保持 python 日志记录脚本无限期运行的建议。脚本在几个小时后起作用
问题描述
我正在编写一个脚本来记录来自太阳能逆变器的串行数据。该脚本在 Windows 上运行了好几个小时,但随后开始起作用。
该脚本应该大约每分钟将调试数据打印到控制台并将日志数据写入 .csv 文件。
- 将调试数据打印到标准输出可以工作数小时,但随后开始变得零星。当我将鼠标悬停在 PowerShell 控制台上并再次聚焦时,打印似乎恢复了。Windows 是否将旧/非活动进程置于睡眠状态或其他什么?
- 该脚本应该大约每分钟将日志数据写入 .csv 文件,但有时它会持续数分钟而不更新 .csv 文件。
当它最终更新文件时,不会丢失任何数据,因此它仍然清楚地在后台记录数据。编辑:仔细查看 .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 上无限期地运行,而不会进入睡眠状态,也不会在几个月后崩溃。通常如何处理这个?
解决方案
推荐阅读
- java - MongoTemplate 拉取查询
- php - 我可以使用 PHP 客户端(或根本不使用!)在 Google Sheets api v4 中按标题访问电子表格吗?
- c++ - 由于图像质量差,使用 OpenCV 从无人机拼接图像时出现问题
- python - 登录 GCP 或本地
- sql - Hive 删除记录的计数
- python - 如何删除具有相似名称的 Python 文件?
- python - 如何从 tensorflow 数据集中选择特定列?
- python - 部署后 Django 登录不起作用 (pythonanywhere.com)
- r - 如何在 stop() 函数的错误消息中获取 data.table?
- c# - HttpWebRequest 中的 ICredentials