【问题标题】:scheduling jobs using python apscheduler使用 python apscheduler 调度作业
【发布时间】:2012-05-14 08:35:31
【问题描述】:
我必须持续监控一个进程,我使用进程 ID 来监控该进程。我编写了一个程序,在进程停止后发送电子邮件,以便我手动重新安排它,但我经常忘记重新安排进程(基本上是另一个 python 程序)。然后我遇到了 apscheduler 模块,并使用 cron 样式调度 (http://packages.python.org/APScheduler/cronschedule.html) 在进程停止后生成进程。现在,一旦进程的 PID 被杀死,我就可以生成该进程,但是当我使用 apscheduler 生成它时,我无法获取新调度进程的进程 ID (PID);因此,我无法监控该过程。 apscheduler 中是否有获取调度进程的进程 ID 的功能?
【问题讨论】:
标签:
python
process
cron
monitoring
scheduling
【解决方案1】:
与其依靠 APSchedule 来返回 pid,不如让您的程序自己报告 pid。守护进程拥有 pidfiles 是很常见的,它们是位于已知位置的文件,仅包含正在运行的进程的 pid。只需将您的主要功能包装成这样:
import os
try:
with open("/tmp/myproc.pid") as pidfile:
pidfile.write(str(os.getpid()))
main()
finally:
os.remove("/tmp/myproc.pid")
现在,当您想要监控您的进程时,您可以首先检查是否存在 pid 文件,如果存在,则检索该进程的 pid 以进行进一步监控。这样做的好处是独立于特定的 cron 实现,并且将来如果您想编写更多与本地程序交互的程序,这将变得更容易。