python loop/timer 或作为 cron 作业发送通知哪个更好?

Which is better to send notifications, a python loop/timer, or as a cron job?

我已经建立了一个带 raspberry pi 的通知系统,它每两分钟检查一次数据库,如果发现任何新条目,它会发送电子邮件。我有两种工作方式..

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

  2. python 脚本设置为检查数据库和发送电子邮件。一个 cron 作业被设置为每两分钟 运行 这个脚本。

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

你的第一个选项,即使你使用 sleep 实现了一种 busy-waiting 策略 (https://en.wikipedia.org/wiki/Busy_waiting), 这个策略比你的第二个选项(cron 方法)使用更多 CPU/memory 因为您将在内存中拥有您的进程足迹 即使它实际上什么都不做。

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

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

因此,我绝对会推荐cron/scheduling方法

无论如何,无论您是否在 crontab 中添加条目,您的 cron 守护程序都将 运行 在后台运行,那么为什么不添加呢?

最后但同样重要的是,想象一下,如果您正忙于等待的进程因任何原因被杀死,如果您选择第一个选项,您将需要手动重新启动它,并且您可能会丢失一些监控条目。

希望对你有帮助。