在使用 python 的调度模块运行待处理作业后,我想打印一次“下一个作业安排在 {next_job_time}”。
这段代码每秒打印一条消息,这不是我想要的:
import schedule
import time
def Job():
#doing something...
schedule.every(1).hours.do(Job)
while True:
schedule.run_pending()
print(f"next job scheduled at {schedule.next_run()}")
time.sleep(1)
我考虑过在 Job 周围使用装饰器,在执行作业后立即打印消息,但是当我这样做时,打印的时间是当前执行的时间,而不是下一个执行的时间。我认为这是因为装饰者在计划之前完成他们的工作,将工作标记为已完成并更新工作列表。
知道如何在作业完成后立即打印消息并仍然获得正确的 next_run 时间吗?
我还发现使用装饰器似乎会产生奇怪的结果,所以我进入循环并在那里显示下一次运行。关键是将这次“下一次运行”与我们上次显示的运行进行比较,并且仅在不同时才显示。
#!/usr/bin/env python3
import time
import schedule
def job():
print("job")
def job2():
print("job2")
last = None
schedule.every(10).seconds.do(job)
schedule.every(7).seconds.do(job2)
while True:
schedule.run_pending()
# Display next run, without repeat
next_run = schedule.next_run()
if next_run != last:
print(f"Next run: {next_run}")
last = next_run
time.sleep(1)
输出示例:
Next run: 2024-03-02 06:32:37.449988
job2
Next run: 2024-03-02 06:32:40.449978
job
Next run: 2024-03-02 06:32:44.478158
job2
Next run: 2024-03-02 06:32:50.486706
job
Next run: 2024-03-02 06:32:51.499801
job2
Next run: 2024-03-02 06:32:58.520998
job2
Next run: 2024-03-02 06:33:00.518501