python - 发送通知、Python 循环/计时器和 cron 作业哪个更好?

标签 python linux loops cron raspberry-pi3

我用树莓派构建了一个通知系统,每两分钟检查一次数据库,如果发现任何新条目,它会发送电子邮件。我有两种工作方式..

  1. Python 脚本在启动时启动并永远运行。它在循环中内置了一个计时器。每两分钟检查一次数据库并发送电子邮件。

  2. 设置了一个Python脚本来检查数据库并发送电子邮件。 cron 作业设置为每两分钟运行一次该脚本。

哪个是更好的选择,为什么?

最佳答案

即使您使用sleep,您的第一个选择也会实现一种忙等待策略 (https://en.wikipedia.org/wiki/Busy_waiting), 此策略比第二个选项(cron 方法)使用更多的 CPU/内存 因为你的内存中会有你的进程足迹 即使它实际上什么也没做。

另一方面,在 cron 方法中,您的进程将仅在执行有用的事件时出现。

想象一下如果你实现这种方法 对于您机器上运行的许多程序, processus 处于等待状态会消耗大量内存, 它还会对操作系统的调度算法产生影响(内存/CPU 使用) 因为队列中有更多进程需要管理。

因此,我绝对推荐 cron/调度方法

无论如何,无论您是否在 crontab 中添加该条目,您的 cron 守护进程都会在后台运行,所以为什么不添加它呢?

最后但并非最不重要的一点是,想象一下,如果您的忙碌等待进程因任何原因被终止,如果您选择第一个选项,您将需要手动重新启动它,并且可能会丢失一些监视条目。

希望对您有帮助。

关于python - 发送通知、Python 循环/计时器和 cron 作业哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47255981/

相关文章:

python - 将 py2app 与 tkinter 和 openpyxl 以及多个文件一起使用?

linux - EC2 中的 apt 命令采用了错误的版本

linux - Iptables,从 prerouting Captive Portal 中排除单个 ip

linux - 命令运行时执行循环

python - 计算 MAD(平均绝对偏差)GroupBy Pandas

python - Py_DECREF 和 PY_INCREF 的目的是什么?

python - Pandas 提取全部合并

android - 使用命令行linux安装android sdk

javascript - JS - 将字符串映射到对象数组 ¿如何更改键名?

python - PySpark - 有没有办法迭代多个列并用列的最大数(+1)填充 NA?