如何在 python 调度模块完成之前清除待处理的作业?

How to clear the pending jobs before it finished in python schedule module?

实际上,我试过这个解决方案,。它按我的预期工作。

但是,我正在制作一个简单的育儿程序,它从 sqlite 数据库文件中获取时间。 .

时间到了,程序会显示通知。 5 分钟后,将显示另一个通知。第二次通知 30 秒后,程序将执行注销命令。

我的代码:

def job():   
   toaster.show_toast(Title, MsgOne, icon_path=Icon) # 1st notification
   time.sleep(300) # Sleep for 5 mins
   toaster.show_toast(Title, MsgTwo, icon_path=Icon) # 2nd notification
   time.sleep(30) # Sleep for 30 sec
   os.system("shutdown -l") # logout 

schedule.every().day.at(TimeFajr).do(job) # Fajr
schedule.every().day.at(TimeDhuhr).do(job) # Dhuhr
schedule.every().day.at(TimeAsr).do(job) # Asr 
schedule.every().day.at(TimeMaghrib).do(job) # Maghrib 
schedule.every().day.at(TimeIshaa).do(job) # Isha'a 

while True:
   schedule.run_pending()
   time.sleep(1)

一切正常。即使在将其转换为 exe (使用 auto-py-to-exe 模块) 之后也是如此。我通过将程序添加到 windows 启动文件夹使程序在后台运行。

问题是,当我将我的电脑置于睡眠模式或锁定我的电脑时在时间到达之前重新登录时间过去后,程序运行QUEUED JOB并注销系统,即使时间过去了。我想要的是,QUEUED JOB 需要被清除或不执行那个。我尝试了上面link的解决方案,但是我将其转换为exe后它不起作用。没有这个,程序工作正常。 (对不起,我的英文很弱!)

仅供参考,我是 python 的新手,这是我的第一个项目。如果还有其他方法可以实现我正在做的事情,请指导我。

更新:

我终于想出了一个方法来做到这一点。 我用 APScheduler

替换了整个 scheduler 模块

我的代码片段:

from apscheduler.schedulers.blocking import BlockingScheduler



def job():   
    toaster.show_toast(Title, MsgOne, icon_path=Icon) # 1st notification
    time.sleep(180) # Sleep for 3 mins
    toaster.show_toast(Title, MsgTwo, icon_path=Icon) # 2nd notification
    time.sleep(30) # Sleep for 30 sec
    toaster.show_toast(Title, MsgThree, icon_path=Icon) # 3rd notification
    #ctypes.windll.PowrProf.SetSuspendState(0, 1, 0) # This will put the PC on sleep
    os.system("rundll32.exe user32.dll,LockWorkStation") # lock windows

scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=fajr_H, minute=fajr_M, misfire_grace_time=1)
scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=dhuhr_H, minute=dhuhr_M, misfire_grace_time=1)
scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=asr_H, minute=asr_M, misfire_grace_time=1)
scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=maghrib_H, minute=maghrib_M, misfire_grace_time=1)
scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=ishaa_H, minute=ishaa_M, misfire_grace_time=1)

scheduler.start()

这个如我所愿。