繁体   English   中英

使用 python apscheduler 调度作业

[英]scheduling jobs using python apscheduler

我必须持续监控进程,并使用进程 ID 来监控进程。 我编写了一个程序,在进程停止后发送电子邮件,以便我手动重新安排它,但我经常忘记重新安排进程(基本上是另一个 python 程序)。 然后我遇到了 apscheduler 模块,并使用 cron 样式调度 ( http://packages.python.org/APScheduler/cronschedule.html ) 在进程停止后生成进程。 现在,一旦进程的 PID 被终止,我就可以生成该进程,但是当我使用 apscheduler 生成它时,我无法获取新调度进程的进程 ID (PID); 因此,我无法监控该过程。 apscheduler 中是否有获取调度进程的进程ID 的函数?

与其依赖 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 的特定实现,如果您想编写更多与本地程序交互的程序,这将使将来更容易。

是的,您可以使用simple-scheduler使用 process-id 监控您的作业。

from time import sleep, ctime, time
from simple_scheduler.recurring import recurring_scheduler

def wait_t_secs(t):
    began_at = ctime(time())
    sleep(t)
    print(f"I waited {t} seconds. [From: {began_at} to {ctime(time())}]")

recurring_scheduler.add_job(target=wait_t_secs,
                            kwargs={"t":5},
                            period_in_seconds=5,
                            job_name="wait_t_secs")
recurring_scheduler.run()
recurring_scheduler.job_summary()

输出:

    Scheduled jobs:
wait_t_secs [recurring | 5-second(s)] running in 24060

I waited 5 seconds. [From: Fri Jul 23 16:54:39 2021 to Fri Jul 23 16:54:44 2021]
I waited 5 seconds. [From: Fri Jul 23 16:54:44 2021 to Fri Jul 23 16:54:49 2021]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM