如何安全地无限期地运行Python脚本?

问题描述 投票:0回答:1

我计划在 python 上制作一个脚本来监视一些外部参数并根据检索到的数据采取行动。检查基本上是在网络上的服务器上进行 http 调用,如果响应不符合预期,则在网络上的另一台服务器上进行另一个 http 调用。

脚本将有 60 秒的检查间隔,并希望无限期地继续检查。

这是我目前拥有的精简版本

import time

if __name__ == '__main__':
    while True:
        runCheckfunction()
        time.sleep(60)

非常直接,这让我怀疑,事情不会那么简单吧?

担忧:

  1. 在睡眠期间,我担心此脚本可能会使用过多的 CPU 资源,这可能是一个问题,因为它将在嵌入式计算机上运行。

  2. 内存泄漏。虽然可能性很小,但如果确实发生,它不会出现在无限循环部分,并且由于我的编程不好,它会出现在 runCheckFunction() 中。函数退出后是否可以安全地假设它释放了它使用的所有内存?我没有全局变量,所有内容都包含在该函数中?

  3. 有更好的方法吗?就像我不知道的标准模块是为了处理这个确切目的而设计的?

python python-3.x
1个回答
0
投票

听起来像是一个您想要定期运行的无状态脚本。

为什么不使用 cron 作业来按您的时间间隔调用脚本,而不是依赖 python 使其定期运行。

优点:

  1. cron 作业正是为此而设计的,它们是一致的
  2. 将防止漂移,time.sleep可能会由于程序唤醒需要多长时间而导致漂移
  3. 最重要的是,我认为,如果你的电脑/服务器重新启动,你将需要手动运行脚本,cron 作业会自动执行此操作

设置:

crontab -e
* * * * * /usr/bin/python3 /path/to/your/script/test.py

类似选项,systemd service 创建服务文件

/etc/systemd/system/test_script.service
:

[Unit]
Description=Run Python script every 60 seconds

[Service]
ExecStart=/usr/bin/python3 /path/to/your/script/test.py
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

替代选项:

signal
图书馆

© www.soinside.com 2019 - 2024. All rights reserved.